Data and web scraping A broken collector reports zero, not an error.
We build data feeds that keep working: the supported route used wherever one exists, the rules of every source written down before anything is collected, and failure that raises an alarm instead of a quiet run of zeros.
Official interfaces used before any collector is built · Source rules recorded in writing · Code, data and runbook handed over to you
Seven ways a data
project quietly fails.
Not one of these announces itself. The output keeps arriving, the dashboard keeps loading, and the numbers underneath stopped meaning anything some weeks ago.
The collector broke and reported nothing rather than an error
The most common failure in this field, and the most damaging, because it does not look like a failure. A source changes its markup, the collector finds no matches, and the pipeline records zero results — which reads as a quiet market rather than as a broken job.
- An empty result treated as valid instead of as a fault
- Weeks of flat numbers nobody questioned
- The decision already made by the time somebody checked the source by hand
There was an official interface all along
A surprising share of scraping projects are solving a problem the source already solved. Advertising platforms, e-commerce systems, accounting tools and most modern services publish a supported way in — slower to discover, far cheaper to keep alive, and not dependent on a page layout staying still.
- A supported interface nobody looked for before building
- A brittle collector maintained for years at real cost
- Fields available officially that the collector could never see
Nobody agreed what one record is
The same business appears five times with five spellings, two phone formats and an old address, and every count built on top is therefore wrong. Entity resolution is unglamorous, it is most of the work, and skipping it produces a dataset that is confidently incorrect.
- One organisation counted repeatedly under near-identical names
- No agreed key, so two sources can never be joined
- Totals that disagree depending on which column was trusted
Personal information was collected because it was visible
Something being publicly displayed does not make it free to collect, store and use. Australian privacy obligations attach to the information, not to how difficult it was to obtain, and a dataset assembled without thinking about that is a liability sitting on a server.
- Names, contact details and identifiers gathered without a reason to hold them
- No decision about how long any of it is kept
- A collection nobody could explain if they were asked to
Nobody read the terms or the robots file
Sites publish what automated access they permit, in their terms and in machine-readable directives. Ignoring both is how a project ends abruptly with a blocked address range, a legal letter, or a dependency that vanishes the week it mattered.
- Published access rules never read before building
- Requests at a rate that reads as an attack rather than as a visitor
- No identification, so the operator cannot even ask you to stop
It lives in a spreadsheet on one person's laptop
The extract worked, once, and now the business depends on a file with no schedule, no history, no access control and no second copy. This is the most common shape a successful data project takes before it fails.
- No versioning, so a bad refresh overwrites the good one
- No history, so nobody can see when a number changed
- One person who understands it, and no documentation
It was never checked against reality
A pipeline produces figures with a confidence that has nothing to do with whether they are true. Unless a sample is regularly read against the source by a human being, an error introduced quietly will propagate through every report built on top of it.
- No sample checked by hand after the first week
- Silent format drift changing the meaning of a field
- Reports built on a foundation nobody has revisited
Buy a feed, not an extract.
An extract is correct on the day it is produced and decays from that afternoon onward. A feed is a small piece of infrastructure with a schedule, an alarm and a history. They are quoted similarly and they age nothing alike.
- The questionA one-off extractA maintained feed
What you receive
A file, correct on the day it was produced.
A maintained feed, with a record of every time it ran.
What happens when the source changes
Nothing visible, until somebody notices the numbers stopped moving.
It fails loudly, names what changed, and somebody is told.
How duplicates are handled
By whoever opens the file, differently each time.
By an agreed rule, applied identically on every run.
Where it lives
Wherever it was emailed.
In your environment, with access control and a history.
How it is checked
It is not.
A sample read against the source, on a schedule, by a person.
What it costs later
Another project, every time the question is asked again.
A review each quarter, and a fix when a source moves.
Four things we will not do, whoever is asking.
These are not caveats at the bottom of a proposal. They are scoped in at the beginning, they occasionally cost coverage, and they are the reason the feeds we build are still running long after they were switched on.
We do not get past a login, a paywall or an anti-bot control
Circumventing a technical access restriction is a different activity from reading a public page, and we treat the line as absolute rather than as a judgement call. If the data sits behind a control, the route to it is an agreement with whoever operates it — or your own credentials, on your own systems, which is a legitimate and completely different job.
We do not build collections of personal information
Contact details, names and identifiers attract obligations under Australian privacy law regardless of how visible they were, and a list of individuals assembled for marketing is exactly the kind of dataset those obligations exist for. Where a project genuinely needs to touch personal information, it is scoped with a purpose, a retention period and a written basis, or it does not go ahead.
We do not ignore a site's published rules
Terms of service and robots directives are read before anything is built, requests identify themselves, and the rate is set to look like a considerate visitor rather than a load test. Where a source says no, the answer is no. This costs a little coverage and it is the reason a feed is still running two years later.
We do not resell somebody else's database as data of ours
A structured database can itself be protected, and lifting one wholesale is not collection, it is copying. We will help you understand a market from public signals; we will not hand you a competitor's asset with a new header row on it.
Pink Flamingo · 41-day period
A$20.43
Cost per job booked
138 jobs — a figure that only means anything once the count is complete
NexData NSW · 15-day period
39
Qualified leads
Commercial and residential reported as separate outcomes
Cornerstone Roofing · 35-day period
68
Quote requests
Each one carrying a source recorded at the moment it arrived
These are lead-generation accounts, dated in each case study, and they are here because they show the standard this page argues for: outcomes counted rather than assumed, and checked back against the business they came from. They are not data-engineering figures. The published platform builds — the NexData operations system and the Msaha marketplace dashboard — are linked further down, and no row count, uptime percentage or saving figure for a collection project appears anywhere on this site.
Ten things happen on a data build. Collecting is the fifth.
The four before it decide whether the project is safe, necessary and countable. The five after it decide whether anybody can still trust the output in a year.
Start from the decision, not from the data
The first question is what you would do differently if you had this, and how often that decision gets made. A surprising number of requests dissolve at this point, because the answer turns out to be available in a report you already pay for.
- The decision this feeds, named by the person who makes it
- How often it is made, which sets how fresh the data must be
- What accuracy is actually required, since perfect is expensive
Look for the supported route before building one
Official interfaces, published exports, bulk files, existing integrations. It is slower to research and enormously cheaper to own, because a supported route does not break when somebody redesigns a page.
- Published interfaces and export tools checked first
- Access requested properly where the source offers it
- Collection from the page only where nothing else exists
Read the rules of every source in writing
Terms, robots directives, rate expectations and whether the material is personal information. Written down per source before a line is written, because this is the step that decides whether the project is safe to run at all.
- A one-line legal and ethical position recorded per source
- Sources excluded where the answer is no, and the exclusion noted
- Requests identified, so an operator can contact you rather than block you
Decide what a record is
One organisation, one product, one property — defined precisely enough that two people counting would agree. The matching rules for merging near-duplicates are agreed at this point rather than invented later by whoever is closest to the spreadsheet.
- A written definition of the unit being counted
- An agreed key, so separate sources can be joined honestly
- Merge rules that are applied identically on every run
Collect politely and predictably
At a rate that does not burden the source, on a schedule, from an identified client, with retries that back off rather than hammer. A collector that behaves like a visitor keeps working; one that behaves like a flood gets blocked and takes your address range with it.
- Rate limits set below what the source can comfortably serve
- Backing off on errors instead of retrying immediately
- The raw response kept, so a parsing bug can be fixed without re-collecting
Fail loudly, never silently
The single most important engineering decision on this page. A run that finds nothing raises an alarm instead of writing a zero, changes in structure are detected rather than absorbed, and somebody is told the same day rather than at the end of the quarter.
- An empty result treated as a fault until proven otherwise
- Structural change detected and reported, not silently accommodated
- An alert to a named person, with what changed and when
Clean, match and de-duplicate in the open
Every transformation is written down and reproducible, so a number can be traced back to the row it came from. Cleaning that happens by hand in a spreadsheet is cleaning nobody can audit or repeat.
- Transformations expressed as code, not as manual edits
- Every output row traceable to its source
- Rejected rows kept, with the reason, rather than deleted
Put it where you own it
In your environment, under your accounts, with access control and a history — not in a tool of ours that you rent. That is the same posture our platform work carries, and it is what makes replacing us an inconvenience rather than a migration.
- Storage in infrastructure the business controls
- Access granted per person, and revocable
- A history, so a number that changed can be explained
Check a sample against reality, on a schedule
A human opens the source and compares it with what the pipeline recorded. Not once at launch — every month, on a small sample, with the result written down. It is the only defence against a dataset that is quietly and confidently wrong.
- A fixed sample size and a fixed cadence, agreed up front
- The discrepancy recorded rather than corrected and forgotten
- Signed off by somebody on your side, not only ours
Hand over the pipeline, not just the output
The code, the source rules, the matching definitions, the schedule and the run history end up with you. If a project is worth doing it is worth being able to keep, and a feed you cannot maintain without us is a dependency rather than an asset.
- Source code in your repository, documented
- The written legal position per source, kept with it
- A runbook a competent person can follow without a call
The first week is spent trying to talk you out of it.
- Week one
The decision, and whether this is needed at all
What you would do differently with the data, how often, and whether it already exists in something you own. We would rather lose the project here than build a feed nobody opens.
- Week one
Source review, in writing
Every candidate source read for its terms, its published access rules and whether it involves personal information. Some are excluded at this point, and the exclusions are part of the deliverable.
- Week two
Define the record, prove one source
The unit of counting agreed, then a single source built end to end — collected, cleaned, matched and stored — so the shape of the whole is visible before the rest is committed to.
- Weeks two to four
Build the rest, with the alarms first
Remaining sources added, with failure detection and alerting built before the collection rather than after the first silent outage. A second person reviews the pipeline before it is scheduled.
- First month
Read a sample by hand
A person compares the output against the sources and writes down what disagrees. The first reconciliation almost always finds something, and finding it early is the point.
- Ongoing
Maintained, reviewed, and eventually retired
Sources move and feeds age. Each quarter the whole thing is reviewed, and where a feed no longer earns its maintenance it is switched off rather than left running as a cost nobody remembers.
A fair share of enquiries end in the first week with a recommendation not to build anything, because the answer already exists in a report the business pays for. That is a good outcome and we would rather reach it in week one than deliver a feed nobody opens.
The dangerous failures here are invisible from the output.
Compound is how our team works on any engagement — six stages every change passes through. Collection work leans hardest on these two, because nothing on this page fails in a way you can see.
Countersign
Nothing reaches a live account with one name on it.
A second person reviews the source rules and the pipeline before it is scheduled. On collection work that review is the control that matters most, because the failure modes here are legal and reputational as well as technical, and none of them is visible from the output.
Ledger
Every executed change becomes a record you can open.
Which sources were collected, when each ran, what changed in the rules and what the monthly sample check found — kept in a dated record rather than in the memory of whoever built it. When a figure moves next year, this is the only honest way to find out why.
Four accounts. Four counted numbers.
Every figure here counts a real job, lead or quote request checked back against the business it came from — the same standard this page asks of a data feed. They are lead-generation accounts; the published platform builds are linked below.
- End-of-lease cleaning · MelbourneA$20.43cost per job booked138 jobs across a 41-day period · counted on booked jobs, reconciled against the businessPink Flamingo
- Carpet cleaning · Perth53jobs booked in 15 daysA$24.92 each, on a brand-new account with no history to learn fromCleanetic
- Security install · New South Wales39qualified leads in 15 daysCommercial and residential counted as separate outcomes, not blendedNexData
- Roofing · Australia68quote requests in 35 daysEvery request recorded against a source at the moment it arrivedCornerstone Roofing
Before you ask us anything
Here is what everybody asks first.
Data collection, answered.
Whether it is legal, what we refuse to do, what happens when a source changes, where the data lives, and how anybody knows it is right.
The first call is free and there is no deck.
Book a free strategy callThere is no single answer, which is why the honest framing is a set of questions rather than a yes or a no. Collecting information a site publishes openly, at a considerate rate, without getting past any access control, is a very different activity from circumventing a login or gathering people's contact details. The questions that decide it are: what does the site's own terms permit, is any of it personal information, is the material itself protected as a database or a copyrighted work, and would the collection burden the source. We answer those in writing per source before building, and we are not lawyers — where a project sits near a line, we will tell you it needs your own legal advice rather than pretend it does not.
Not as a list to market to, no. Australian privacy obligations attach to personal information regardless of how publicly it was displayed, so a dataset of individuals assembled because their details happened to be visible is a liability sitting on your server. Where a project genuinely requires personal information — and some legitimately do — it is scoped with a stated purpose, a retention period and a written basis for holding it, and everything not needed for that purpose is discarded at collection rather than kept in case.
Then we use it, and we look for it first. Advertising platforms, e-commerce systems, accounting tools, property and business registers and most modern services publish a supported route, and it beats collection from a page on every measure that matters: it does not break when somebody redesigns the site, it usually exposes fields the page never shows, and it is permitted rather than tolerated. A meaningful share of the projects that arrive here described as scraping turn out to be integration work, and that is a better outcome for everybody.
Four things, and none of them is negotiable. We will not get past a login, a paywall or an anti-bot control. We will not build a collection of personal information for marketing. We will not ignore a site's published terms or its robots directives, or run at a rate that burdens the source. And we will not lift somebody else's structured database and hand it to you with a new header row. Those refusals cost coverage occasionally, and they are the reason the feeds we build are still running a long time after they were switched on.
It fails loudly, which is the single most important design decision in this kind of work. The default behaviour of a naive collector is to find nothing and record zero, and a zero looks exactly like a quiet week — so businesses make decisions for months on data that stopped arriving. Ours treat an empty result as a fault until proven otherwise, detect structural change rather than absorbing it, and alert a named person the same day. Repairing a source is routine; discovering six weeks late that it broke is not.
In your environment, under your accounts, with access control and a history — not in a tool of ours that you rent by the month. Where the requirement includes data residency, that is a hosting decision made deliberately rather than inherited from whichever platform was convenient. The practical test we hold ourselves to is that removing us should be an inconvenience rather than a migration, and that is only true if the storage and the code were yours from the first week.
Usually, and the answer depends on the source rather than on the intent. Publicly listed prices on a site that permits automated access, collected at a considerate rate, is ordinary market research and businesses have done it by hand for a century. What changes the answer is a site whose terms prohibit it, a page behind an account, or a request pattern that would burden the operator. We read the position per source and tell you which of your targets are in and which are out, rather than quietly collecting everything and hoping.
Because somebody checks it against reality on a schedule and writes down what they found. A fixed sample is opened at the source and compared with what the pipeline recorded, monthly, by a person, with the discrepancies recorded rather than silently corrected. Pipelines produce output with a confidence entirely unrelated to whether it is true, and the only reliable defence is a human reading a small sample regularly. If a supplier cannot tell you when their data was last verified by hand, it has not been.
Yes, and it is often the most valuable version of this work. Your CRM, your booking system, your accounting package and your advertising accounts each hold part of the picture and none of them holds all of it, so the job is joining them on an agreed key and deciding what one customer means across all four. That is your own data, accessed with your own credentials through supported routes, and none of the collection questions on this page apply to it.
A maintained feed rather than a file, and the machinery behind it. That means the collection code in your repository, the written source rules, the record definitions and matching logic, the schedule, the alerting, the run history, and a runbook a competent person on your side can follow without calling us. Where the output is meant to be read rather than queried, it lands in a dashboard or a warehouse table you own. What we do not hand over is a spreadsheet, because a spreadsheet is how these projects die.
A single well-behaved source with an official route can be standing within a fortnight. Several sources with no supported access, real matching problems and a residency requirement is a longer engagement, because the work is in the definitions rather than in the collecting. The fee scales with the number of sources, how hostile they are to being read, and how much cleaning and matching sits between raw and usable — quoted after we have looked at the sources rather than before. The first conversation, including the honest read on whether you need this at all, is free.
The published platform work is the closest reference and it is linked from this page: an operations system handling quoting, invoicing and dispatch, and a marketplace operations dashboard where the data model rather than the interface was the difficult part. What we deliberately do not publish is a row count, an uptime percentage or a saving figure for a collection project, because no such figure exists on this site and borrowing one from elsewhere would be exactly the kind of confidently wrong number this page is about.
Data is rarely the whole job.
Most engagements that start here end up touching two or three of the following. If you are not sure which order to do them in, that is exactly what the first call is for.
- Custom platform developmentThe system a maintained feed usually ends up inside, and the team that builds it under your own accounts.
- An operations platform, builtQuoting, invoicing and dispatch in one custom system — the kind of place a data feed has to arrive in and be trusted.
- A marketplace operations dashboardA published build where the data model, not the interface, was the hard part of the engagement.
- Technology divisionWhere custom enterprise software and sovereign hosting sit, for projects with a data-residency requirement attached.
- Tracking and analyticsThe measurement side of the same argument — where a number comes from, and whether anyone has checked it lately.
- One container for every tagThe website end of the pipeline, documented, with no tag we cannot explain and nothing collecting quietly.
- GA4 around real conversionsWhere marketing figures usually live before anybody tries to join them to the rest of the business.
- Follow-up that happens without anyone rememberingThe CRM a cleaned, de-duplicated contact record has to land in if any of it is going to be usable.
- E-commerce SEOCatalogue and feed work for stores, where product data quality is the difference between listed and invisible.
- Research divisionFor work that needs evidence gathered from people rather than pages, with the ethics handled properly.
- Marketing and growth advisoryWhen the honest answer is that the decision, not the dataset, is what needs work first.
- Accounts with the numbers attachedThe counted, dated results this practice has produced, including the platform builds linked above.
The same argument at the smallest possible scale, inside a CRM: why dirty contact data quietly kills good leads. And for a number that looks authoritative and is not, the single tag most often corrupting a website's figures.
Tell us the decision
Describe what you would do differently if you had the data and we will tell you whether a supported route already exists, which sources are safe to read, and whether this is worth building at all.
No pitch deck. No upsell. A real conversation and a number you can check.
