Automation & Data Engineer (Python + n8n + AWS – Construction Estimating)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Part Time

SALARY

USD $8 – $12 / hour

HOURS PER WEEK

30

DATE UPDATED

Jan 5, 2026

JOB OVERVIEW

We are building an automated construction estimating platform (Specdoors) that processes door schedules and drawings, applies supplier pricing rules, and generates client-ready Excel and PDF quotes with minimal human interaction.

The system flow is:
Client uploads drawings ? automated document extraction (AWS Textract / Rekognition) ? rule-based pricing in Python ? Excel & PDF quote generation ? human QA ? send to client.

This is NOT a generic AI role. This is a backend automation and data processing role with real-world pricing logic.

What you will be working on:
• Building automated workflows using n8n
• Integrating AWS Textract for table and form extraction
• Writing Python logic to match extracted data to supplier pricing rules (Excel-based)
• Generating formatted Excel quotes from templates
• Exporting PDF quotes from Excel or via Python
• Implementing validation and QA checks (missing data, pricing mismatches, size bands)

Important:
• Pricing is deterministic and rule-based (not AI guessing)
• Supplier pricing is already provided in Excel rule packs
• Accuracy and traceability matter more than speed

Nice to have (not required):
• Experience with construction, estimating, or quantity surveying
• Experience with OCR or document processing systems

This role suits someone who enjoys building practical automation systems and clean backend logic.

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0205
Total Execution Time  0.0224
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,490,592 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Automation-Data-Engineer-Python-n8n-AWS-Construction-Estimating-1546678
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 15 (0.0128 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1546678
 LIMIT 1 
0.0003   SELECT *
FROM `employers`
WHERE `employer_id` = 843919
 LIMIT 1 
0.0016   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1546678
AND `misc`.`idIS NULL 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1546678
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-18',ej.date_added) duration_daysDATEDIFF('2026-04-18',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-04-18',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1546678' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1546678 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1546678
AND `misc`.`idIS NULL 
0.0013   UPDATE employer_jobs SET hit_counts '***Jan-05-2026=92***Jan-06-2026=62***Jan-07-2026=40***Jan-08-2026=20***Jan-09-2026=14***Jan-10-2026=7***Jan-11-2026=11***Jan-12-2026=11***Jan-13-2026=10***Jan-14-2026=10***Jan-15-2026=13***Jan-16-2026=14***Jan-17-2026=16***Jan-18-2026=3***Jan-19-2026=18***Jan-20-2026=13***Jan-21-2026=9***Jan-22-2026=16***Jan-23-2026=8***Jan-24-2026=6***Jan-25-2026=5***Jan-26-2026=16***Jan-27-2026=5***Jan-28-2026=14***Jan-29-2026=7***Jan-30-2026=6***Jan-31-2026=2***Feb-01-2026=2***Feb-02-2026=4***Feb-03-2026=1***Feb-04-2026=1***Feb-05-2026=7***Feb-06-2026=1***Feb-07-2026=9***Feb-08-2026=5***Feb-09-2026=3***Feb-10-2026=3***Feb-11-2026=3***Feb-13-2026=4***Feb-14-2026=5***Feb-15-2026=4***Feb-16-2026=3***Feb-17-2026=2***Feb-18-2026=10***Feb-19-2026=4***Feb-20-2026=7***Feb-21-2026=2***Feb-24-2026=1***Feb-25-2026=2***Feb-27-2026=1***Feb-28-2026=5***Mar-01-2026=1***Mar-02-2026=3***Mar-03-2026=3***Mar-04-2026=1***Mar-05-2026=4***Mar-07-2026=2***Mar-09-2026=2***Mar-10-2026=2***Mar-12-2026=6***Mar-13-2026=2***Mar-14-2026=1***Mar-16-2026=1***Mar-17-2026=5***Mar-19-2026=2***Mar-20-2026=2***Mar-21-2026=4***Mar-22-2026=3***Mar-23-2026=2***Mar-25-2026=4***Mar-26-2026=6***Mar-27-2026=4***Mar-28-2026=2***Mar-30-2026=25***Mar-31-2026=38***Apr-01-2026=27***Apr-02-2026=12***Apr-03-2026=11***Apr-04-2026=12***Apr-06-2026=1***Apr-07-2026=1***Apr-08-2026=1***Apr-09-2026=2***Apr-10-2026=2***Apr-12-2026=2***Apr-16-2026=1***Apr-17-2026=1***Apr-18-2026=2' WHERE job_id'1546678'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Jan-2026=448***Feb-2026=89***Mar-2026=124***Apr-2026=75' WHERE job_id'1546678'  
0.0010   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1546678' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1546678 
0.0044   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '843919'
AND `date_added` >= '2022-06-08' 
0.0005   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)