Non inviare un curriculum generico — genera un curriculum e una lettera di presentazione personalizzati per questo specifico ruolo.
Cato is seeking a Python developer to own and operate scrapers for national tender portals, handling the full data lifecycle from extraction to enrichment. You will maintain the scraper, job behind it, and the data output, ensuring reliability even as sources change.
You’ll work with SQL, write robust ETL scripts, and leverage orchestrators like Prefect, Airflow, or Dagster. Strong curiosity about AI enrichment and data quality is essential.
Bring a tender from the source portal into Cato: scraping, parsing, merging, enrichment. You'll start by owning a handful of sources end to end - the scraper, the job behind it, and the data that comes out - and take on more as you go. Not tickets handed to you: sources you're responsible for.
Build and maintain scrapers for national tender portals, where reading the source in its original language is part of the job. Keep them alive: portals change their HTML, move endpoints, break pagination, throttle you. You find out before the customer does. Turn messy sources into clean records: broken HTML, inconsistent XML, APIs that lie about their own schema. Write and maintain orchestrator flows: retries, backfills, alerting, and a clear answer to "Did today's run actually land?" Work on merge and dedup - the same tender arrives three times, in three shapes, and only one version can reach the customer. Ship AI enrichment steps: batch LLM extraction of requirements, embeddings, OCR on attachments. Guard data quality with tests and checks that fail loudly before a customer finds the gap.
Python that holds up: typed, tested, and readable six months later. You've scraped something real: HTTP, HTML and XML parsing, pagination, sessions, rate limits - and you know why a scraper that worked yesterday is broken this morning. SQL you're comfortable in: joins, aggregations, window functions. You'll read from the database every day; tuning and running it isn't your job. Builder by default: you see a manual process and your first instinct is to automate it. Comfortable with messy sources: broken HTML, inconsistent XML, PDFs that were scans of scans. You close your own loop: you check that what you shipped actually ran, before someone else has to ask. Experience 1-2 years writing Python in production: scrapers, ETL scripts, automation - anything that had to run unattended and be fixed when it didn't. Exposure to an orchestrator (Prefect, Airflow, Dagster) is a plus, not a requirement: you'll learn ours properly. Exposure to LLM-based extraction is welcome; curiosity about it is mandatory.
No micromanagement: we trust you to own your part of the stack. No "standard" 9-to-5 mentality: we care about outcomes and we are looking for people who are willing to go the extra mile. No "we've always done it this way" excuses: we're here to disrupt, not to follow old patterns.
Data & Infra: Python, PostgreSQL, Prefect, AWS AI: batch LLM extraction, embeddings, OCR
RAL €35,000 - €45,000 equity, depending on profile.
Lorenzo Rossetto lrossetto@get-cato.com