Skip to content
Masab

Service

Data pipelines*

A script that works today is not a data pipeline. I build collection systems that keep running when a source changes its markup, blocks a request or throttles your range, and that store what they gather in a shape you can actually query.

Typical timeline

1 to 8 weeks

Pricing

Fixed or monthly

Reviews

5.0 from 148

Based in

Islamabad, Pakistan

The problem

Anyone can write a scraper that works once. The difficulty is the second month.

A source changes its markup and your selectors return empty strings, silently, for three weeks before someone notices the numbers stopped moving. A rate limit kicks in and jobs start failing without retrying. Storage grows into something nobody can query because the shape was never designed, only accumulated.

What you want is a system that keeps collecting, tells you when it breaks, recovers on its own where it can, and hands you data in a shape that answers questions later rather than only today.

What the work covers
Source analysis firstWhat each source exposes, how it changes, whether an API exists that nobody noticed, and what its terms and robots rules allow.
Scraper architecture, not scriptsExtraction separated from scheduling and storage, so a change in one source does not mean rewriting the system.
Queues, retries and idempotencyThousands of concurrent jobs handled through a queue, with retries and backoff, and jobs safe to run twice without duplicating records.
Rate limit and politeness handlingRequests paced per source, respecting the limits a site sets, so collection stays sustainable rather than getting you blocked.
Layout change detectionValidation on what comes back, so an empty or malformed extraction raises an alert instead of quietly writing nothing for a fortnight.
A storage schema built for queryingNormalised, indexed, and designed around the questions you will ask, including how history and changes over time get recorded.
Monitoring and alertingRun history, success rates per source, and an alert when a source stops producing. You find out from the system, not from a client.
An API or export over the resultsEndpoints for searching and filtering, scheduled exports, or notifications when something matches a rule.
Shapes of project

Sources vary enormously in difficulty. A well structured public listing page and a heavily defended single page application are different projects, so I look before quoting.

ProjectScaleTypical timelineNotes
One off extractA single source, a fixed dataset3 to 7 daysYou need the data once, cleaned and delivered as a file or a table. No scheduling, no monitoring.
Monitored pipelineOne to three sources, running continuously2 to 5 weeksScheduled collection, retries, alerting when a source breaks, and storage designed for querying. The most common shape.
Monitoring productSeveral sources, alerts to end users4 to 8 weeksEverything above plus user facing saved searches and notifications, which turns a pipeline into something you can charge for.
Ingestion for an existing platformMany sources, one canonical modelScoped case by caseReconciling several sources that name the same thing differently, into one model where counts can be trusted.
How it runs

01

A look at what you have

You tell me what you are building and what is in the way. I ask questions until I understand it, then tell you whether the project makes sense. This part is free and sometimes ends with me saying no.

02

A written scope and a number

Deliverables, timeline and price in writing before anything starts. The number does not move unless the scope does, and scope changes get quoted separately.

03

Build in the open

You get working builds you can click through, pushed regularly. No long silence followed by a surprise, so feedback lands while it is still cheap to act on.

04

Hand it over properly

A repository you own, documentation that gets a new developer running locally, and a recorded walkthrough of the deploy. Then a support window, because launch is when the real problems show up.

Questions I get asked

Is this legal?

It depends on what you are collecting and from where, and it is worth settling before anyone writes code. I work with publicly accessible data, respect robots rules and rate limits, and keep collection paced so it does not burden the source. What I will not build is anything that needs someone else's login, bypasses authentication, or defeats bot protection to get at data that is not public. If your requirement depends on that, I am the wrong person, and I will say so on the first call rather than after you have paid.

What happens when a site changes its layout?

It will, and the system is designed on that assumption. Extraction is validated against what it produces, so a selector that suddenly returns empty raises an alert instead of writing nothing quietly. Extraction logic is also separated per source, so fixing one is a small change rather than a rewrite. On an ongoing arrangement I handle those fixes. On a fixed price build I document how to make them and record a walkthrough.

How do you handle getting blocked?

Mostly by not deserving it. Requests get paced per source, run through a queue rather than in parallel bursts, and back off when a source signals it wants less traffic. Politeness fixes most blocking, because most blocking is a response to volume. Where a source is behind serious bot protection, that is a case by case conversation and sometimes the honest answer is that the data is not reliably available.

How fresh will the data be?

You set that, and it drives the cost. Every fifteen minutes across three sources is a different system from once a day across one. On the monitoring products I have built, alerts reached users within seconds of a match appearing, which meant collection had to run continuously rather than on a schedule. Tell me how fresh it needs to be and I will tell you what that costs to run.

Where does the data live?

Usually PostgreSQL, because you will want to query it in ways you have not thought of yet and a relational schema handles that better than a pile of JSON files. Redis for the queue and for anything needing fast lookup. If you already have a warehouse you want it landing in, I write to that instead.

Can you add this to a product we already run?

Yes. I read your codebase and work to its conventions rather than bolting on something that only I understand. The ingestion side usually sits well as a separate service with a defined interface, which keeps it from tangling with the rest of your application and makes it easier to replace later.

What if an official API exists?

Then we use it, and I will check before quoting a scraper. An API is more stable, cheaper to run and less likely to break, so finding one is the best possible outcome for you even though it makes the project smaller. It happens more often than people expect, because the endpoint powering a site's own search is sometimes public and undocumented.

Open to new work

Tell me what you are trying to build.

If I am the right person you will get a scope and a number in writing. If I am not, I will say so and point you somewhere better.