Blog / Data engineering

Data engineering

Building reliable pipelines on web data: scrapers versus APIs, rate limits, retries, data quality, storage and cost control.

  1. Detect Schema Changes in API JSON Responses

    Infer a path-and-type schema from a recorded Google Search response (71 paths), diff each new response against it and alert on removed or retyped fields.

  2. Concurrent API Requests in Python: Asyncio Under Rate Limits

    A Python asyncio fetcher that paces calls to your per-second limit, honours Retry-After and prices a 20,000-call batch at 20,000 credits.

  3. Incremental API Data Pulls: Fetch Only New Records

    Pull only new listings: sort newest first, keep a high-water mark or a seen-ID set per query, and stop paging early. Python tested on Craigslist and eBay data.

  4. Scheduling Web Data Pulls: Cron, Queues or Workflows

    Cron, a job queue or a workflow engine for recurring API pulls? Compare failure handling and credit cost, with a verdict per team size and a cron script.

  5. Save API JSON to Parquet in Python

    Write API JSON to date-partitioned Parquet with pyarrow and a fixed schema, so a price that arrives as 441 one day and 393.73 the next doesn't break it.

  6. Handle Web Data API Errors in Python: 4xx, 5xx and Timeouts

    Map the API's error codes to retry, fix or stop in Python: 429 and 503 honour Retry-After, 4xx stops, and failed calls cost 0 credits.

  7. Web Data Quality Checks for Scraped and API Data

    Seven web data quality checks in Python, with code written against a recorded Zillow search response: schema drift, null rates, duplicate zpids and outliers.

  8. Cache API Responses in Python: TTLs and Credit Savings

    A SQLite cache for API responses, keyed on endpoint and parameters, with per-endpoint TTLs and the credits each cache hit saves.

  9. Web Data to a Warehouse: Loading API JSON into Postgres

    Land AutoScout24 search JSON in a Postgres JSONB table, flatten it with a view, then upsert on listing_id. Code and credit cost per refresh.

  10. Scraper or API: What Maintaining a Scraper Really Involves

    What a scraper costs to keep running: selector fixes, proxies, retries and monitoring, set against an API at 1 credit per successful call.

  11. Normalise Prices Across Currencies and Sources in Python

    Parse '162,90 €' and $89.99 into Decimals, tag each price with its currency, convert with a dated ECB reference rate, and keep the original value for audit.

  12. Paginate a Web Data API in Python: Safe Page Loops

    Page through the eBay search endpoint in Python with has_more, dedupe by product_id and a credit ceiling. Each page costs 1 credit.

  13. Estimate a Web Data Pipeline's Monthly Credit Cost

    A 10-step checklist that turns a data requirement into calls a month (entities, refresh rate, pages, fan-out, margin), with worked arithmetic against packs.

  14. Flatten Nested JSON to CSV in Python: Two Ways Compared

    Flatten a recorded Zillow response to CSV with pandas json_normalize (60 columns) and plain Python (63), split photo lists into a child table, fix integers.

  15. Retry Web API Calls Without Paying Twice

    Retry only 429, 502 and 503. Failed responses return X-Credits-Used: 0, but a timeout is the gap. The credit arithmetic, a Python loop and a balance check.

  16. Deduplicate Listings Across Sources: Matching Without IDs

    Match car listings from AutoScout24 and AutoTrader UK with no shared ID: normalise make and model, block, then score year, price and mileage in Python.