Backend Developer – PHP + Python (AI & Web Scraping)

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

TYPE OF WORK

Full Time

SALARY

1100

HOURS PER WEEK

40

DATE UPDATED

Oct 14, 2025

JOB OVERVIEW

About Us
We are a fast-growing automotive technology company specialized in importing, managing, and
selling vehicles across multiple European markets. We are building an intelligent data platform that
automates vehicle data enrichment using multi-source scraping, AI-based normalization, and
real-time monitoring — starting with OEM portals such as ---------- , AutoScout24, and ---------- .
Role Overview
We are looking for a Backend Developer with strong experience in web scraping and backend
development, and a solid interest in AI-powered data enrichment. You will implement and maintain
backend scraping pipelines, Python AI enrichment components, and integrate data flows into our
existing PHP + MySQL platform.
Key Responsibilities
• Develop and maintain web scraping scripts for OEM and third-party portals ( ---------- ,
AutoScout24, ---------- , etc.).
• Implement Python AI enrichment modules: option parsing, translation, consensus calculation,
deduplication, anomaly detection.
• Integrate AI enrichment results into the existing PHP + MySQL CRM platform.
• Work with queues (MySQL or Redis) to manage orchestration between PHP and Python.
• Implement IP rotation, router logic, error handling, and pacing to improve scraper resilience.
• Collaborate on building monitoring dashboards with Prometheus and Grafana.
• Contribute to improving data quality and enrichment coverage.
Required Skills & Experience
• Strong experience with PHP (Symfony or similar frameworks).
• Proven experience in web scraping (cURL, Puppeteer, Playwright, or similar tools).
• Good knowledge of Python for AI API integration and data processing.
• Solid understanding of MySQL or other relational databases.
• Experience working with Supervisor or similar process managers.
• Basic experience with AI/LLM APIs (OpenAI, Anthropic, etc.) and structured JSON handling.
• Familiarity with asynchronous task execution or queue systems.
• Fluent English (spoken and written) — mandatory for communication and documentation.
Nice to Have
• Experience with Redis or RabbitMQ.
• Familiarity with data normalization and deduplication techniques.
• Experience with Prometheus & Grafana monitoring stack.
• Knowledge of German or Dutch automotive market data.
• Background in data-driven or automotive platforms.Soft Skills
• Proactive and reliable team player.
• Strong attention to detail and problem-solving mindset.
• Good communication and documentation skills.
• Comfortable working in a distributed environment with asynchronous workflows.
• Able to follow technical direction and contribute to a shared roadmap.
Tech Stack You’ll Work With
• Languages: PHP 8+, Python 3.11+
• Frameworks: Symfony, Flask/FastAPI (AI layer)
• DB/Queue: MySQL, Redis (optional), RabbitMQ (optional)
• Scraping: Puppeteer, Playwright, cURL, headless browsers
• AI: OpenAI, Anthropic, JSON schema validation, prompt engineering
• Monitoring: Prometheus, Grafana
• Orchestration: Supervisor (initially)
What We Offer
• Full-time position on a strategic AI-driven project.
• Remote-friendly work environment.
• Hands-on work with real AI enrichment applications.
• Clear technical roadmap and structured tasks.
• Competitive salary & long-term growth opportunities.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0032
Controller Execution Time ( Jobseekers / Job )  0.0251
Total Execution Time  0.0291
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,508,248 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Backend-Developer-PHP-Python-AI-Web-Scraping-1490560
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0149 seconds)  (Hide)
0.0016   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1490560
 LIMIT 1 
0.0013   SELECT *
FROM `employers`
WHERE `employer_id` = 863903
 LIMIT 1 
0.0042   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1490560
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-15',ej.date_added) duration_daysDATEDIFF('2026-04-15',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-15',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1490560' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1490560 
0.0009   UPDATE employer_jobs SET hit_counts '***Oct-14-2025=133***Oct-15-2025=42***Oct-16-2025=18***Oct-17-2025=9***Oct-18-2025=10***Oct-19-2025=6***Oct-20-2025=3***Oct-21-2025=5***Oct-22-2025=12***Oct-23-2025=2***Oct-24-2025=2***Oct-25-2025=4***Oct-27-2025=2***Oct-28-2025=6***Oct-29-2025=3***Oct-30-2025=3***Oct-31-2025=5***Nov-01-2025=1***Nov-02-2025=3***Nov-03-2025=4***Nov-04-2025=2***Nov-05-2025=1***Nov-06-2025=3***Nov-07-2025=2***Nov-08-2025=1***Nov-09-2025=3***Nov-11-2025=3***Nov-12-2025=3***Nov-13-2025=1***Nov-15-2025=2***Nov-16-2025=2***Nov-17-2025=5***Nov-18-2025=1***Nov-19-2025=1***Nov-20-2025=3***Nov-21-2025=2***Nov-23-2025=4***Nov-24-2025=4***Nov-25-2025=1***Nov-26-2025=2***Nov-27-2025=1***Nov-29-2025=1***Nov-30-2025=3***Dec-01-2025=3***Dec-03-2025=3***Dec-04-2025=2***Dec-06-2025=1***Dec-07-2025=2***Dec-08-2025=2***Dec-09-2025=2***Dec-11-2025=1***Dec-12-2025=1***Dec-13-2025=1***Dec-15-2025=2***Dec-16-2025=1***Dec-17-2025=1***Dec-18-2025=2***Dec-19-2025=2***Dec-21-2025=1***Dec-22-2025=2***Dec-23-2025=1***Dec-26-2025=3***Dec-27-2025=1***Dec-28-2025=1***Dec-30-2025=1***Dec-31-2025=1***Jan-01-2026=2***Jan-02-2026=1***Jan-07-2026=1***Jan-08-2026=1***Jan-09-2026=1***Jan-10-2026=1***Jan-15-2026=1***Jan-16-2026=2***Jan-17-2026=1***Jan-18-2026=3***Jan-19-2026=1***Jan-20-2026=3***Jan-21-2026=1***Jan-22-2026=3***Jan-23-2026=2***Jan-29-2026=1***Jan-30-2026=1***Jan-31-2026=1***Feb-01-2026=1***Feb-05-2026=1***Feb-09-2026=1***Feb-12-2026=1***Feb-13-2026=2***Feb-18-2026=1***Feb-22-2026=1***Feb-24-2026=1***Feb-25-2026=1***Feb-27-2026=1***Feb-28-2026=3***Mar-02-2026=1***Mar-05-2026=1***Mar-10-2026=1***Mar-16-2026=1***Mar-17-2026=3***Mar-20-2026=1***Mar-22-2026=1***Mar-23-2026=3***Mar-24-2026=2***Mar-25-2026=2***Mar-26-2026=4***Mar-27-2026=1***Apr-01-2026=1***Apr-04-2026=1***Apr-07-2026=2***Apr-08-2026=1***Apr-10-2026=1***Apr-15-2026=1' WHERE job_id'1490560'  
0.0009   UPDATE employer_jobs SET monthly_hits '***Oct-2025=265***Nov-2025=59***Dec-2025=37***Jan-2026=27***Feb-2026=14***Mar-2026=21***Apr-2026=7' WHERE job_id'1490560'  
0.0013   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1490560' 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` = 1490560 
0.0019   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '863903'
AND `date_added` >= '2022-06-08' 
0.0006   select from teasers 
0.0003   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)