Our position: we are Geonode and we sell proxies, which is one input to an aggregator and the one most guides overemphasise. So the honest framing up front — proxies are the last thing you should buy, not the first. A large share of aggregatable data is available through feeds, APIs and sitemaps that are free, structured, stable and explicitly offered for this purpose. Building a crawler for content someone publishes as an RSS feed is wasted work, and buying bandwidth before you have discovered that is wasted money. Proxies become relevant at a specific point — when you are crawling at volume, from multiple regions, against sites that rate-limit — and that point comes later than most people assume. There is a section below on exactly where that line is.
What Kind of Aggregator: Four Models
These have different economics and different legal exposure, and conflating them is the first mistake.
Link aggregators collect headlines and link out. Low storage, low legal exposure, low switching cost for users. The value is entirely in curation and speed. News and content aggregators mostly live here.
Listing aggregators collect structured records — jobs, property, cars, events — and present them as a searchable database. Higher value, higher effort, and the model where deduplication becomes the whole engineering problem.
Price aggregators track the same item across sellers. The narrowest and hardest: matching products across retailers who describe them differently is a genuinely difficult problem, and freshness requirements are brutal because a stale price is worse than no price.
Review and rating aggregators combine opinion data. Sparse coverage, heavy normalisation work, and the most exposed to accusations of misrepresenting the source.
Pick one deliberately. The architecture differs, the legal analysis differs, and "an aggregator for everything" is how projects become unfinishable.
Get the Data the Easy Way First
In order of preference. Work down this list and stop as soon as something works.
Official APIs. If the source publishes one, use it. It is stable, structured, sanctioned, and someone will fix it when it breaks. Read the terms — most restrict redistribution, caching duration and commercial use, and those restrictions shape your product.
Partner or affiliate feeds. Many industries publish bulk feeds specifically for aggregators, because aggregators send them traffic. Job boards, property portals, retailers and travel operators frequently have a partner programme that hands you the entire dataset. This is the single most underused source in this space, and the reason is that people search for "how to scrape X" instead of emailing X to ask whether they have a feed. Ask. A surprising number say yes.
RSS and Atom feeds. Still widely published, still ideal for link aggregation. Structured, cheap, designed for exactly this, and unambiguously offered for consumption.
Sitemaps. sitemap.xml gives you a complete URL list plus lastmod timestamps, which is how you crawl efficiently rather than by brute force. Even where you must crawl, the sitemap tells you what changed so you fetch only that.
Structured data in the page. Before writing HTML parsers, check for JSON-LD in a <script type="application/ld+json"> block. Schema.org markup for JobPosting, Product, Event and Recipe is widespread because it drives search features, and it gives you clean structured data from a page you were going to fetch anyway. It also survives redesigns far better than CSS selectors.
HTML parsing. Last resort. Fragile, high-maintenance, and the thing that turns an aggregator into a permanent job.
The ordering matters more than any individual item. Teams that start at the bottom of this list build a crawler and then discover the feed six months later.
When You Have to Crawl: robots.txt Is a Standard Now
robots.txt stopped being a convention in 2022. RFC 9309 standardises the Robots Exclusion Protocol, and if you are writing a crawler it defines the behaviour you should implement.
Four requirements worth knowing precisely:
Matching is by specificity, not order. "The most specific match found MUST be used. The most specific match is the match that has the most octets." Not first-match-wins, which is what many hand-rolled parsers assume.
Cache for no more than 24 hours. "Crawlers SHOULD NOT use the cached version for more than 24 hours, unless the robots.txt file is unreachable." Fetching it once at deploy time is not compliant.
Server errors mean stop. "If the robots.txt file is unreachable due to server or network errors... the crawler MUST assume complete disallow." A 5xx means back off entirely. A 404, by contrast, means no restrictions — there is no file, so nothing is disallowed.
Parse at least 500 KiB. "The parsing limit MUST be at least 500 kibibytes." Large sites have large files.
Use a maintained library rather than writing this yourself. The specificity-matching rule alone is a common source of bugs, and a crawler that misreads a robots.txt is a crawler that generates complaints.
Beyond the file itself, the ordinary courtesies: identify yourself with a real user agent that includes a contact URL, honour Crawl-delay where present, back off hard on 429 and 503, and cache so you never fetch unchanged content twice. Conditional requests with If-Modified-Since or If-None-Match cost the source nothing and cost you nothing. Most sites that block aggregators do so because of behaviour, not existence.
The Legal Layer: Copyright, TDM Opt-Outs and Database Rights
Not legal advice, and jurisdiction matters enormously. But there are four things worth understanding before you build.
Facts are generally not copyrightable; expression is. A job title, a salary, a price and a date are facts. The description written to sell the job is expression. Aggregating the former is on far firmer ground than reproducing the latter. This single distinction shapes most sensible aggregator design: store the structured facts, link to the source for the prose.
Snippet length matters. Reproducing a headline and a sentence with a link is a different proposition from reproducing an article. Several jurisdictions have litigated where the line falls, and the answers differ. Shorter is safer, and linking out rather than reproducing is safest.
The EU has a text and data mining opt-out that is machine-readable by design. Article 4 of Directive (EU) 2019/790 permits text and data mining by anyone, provided rightsholders have not expressly reserved their rights "in an appropriate manner, for instance by using machine-readable means". For content made publicly available online, the directive treats machine-readable reservation — "including metadata and terms and conditions of a website or a service" — as the appropriate route. The exception also requires that the material was accessed lawfully.
The practical implication for a crawler: reservations expressed in machine-readable form are meant to be honoured, and the EU has been working toward standardising the protocols for expressing them. Building a crawler that ignores machine-readable reservations is building a compliance problem into your foundations.
The EU also has a separate database right. Beyond copyright, the Database Directive created a sui generis right protecting substantial investment in obtaining, verifying or presenting the contents of a database — independently of whether the contents themselves are copyrightable. That is directly relevant to aggregators, because extracting a substantial part of someone's listings database can engage it even where each individual listing is a bare fact.
Then there are terms of service, which are contractual rather than statutory, and which many sites use to prohibit automated access outright. Whether a term binds you when you never clicked anything is a genuinely contested question that varies by jurisdiction. Read them anyway: they tell you what the site will do about it, which is often more immediately relevant than what a court would say.
The pragmatic summary: prefer sanctioned sources, store facts rather than prose, link rather than reproduce, honour machine-readable reservations, and get advice for anything commercially significant.
Architecture: Four Stages and the Hard One
Every aggregator is the same four stages, and only one of them is difficult.
Fetch. Get raw content. Concerns: scheduling, rate limiting, retries, caching, conditional requests. Store the raw response, always — when a parser breaks you want to re-parse historical data rather than re-fetch it.
Parse. Turn raw content into structured records. Concerns: brittleness and change detection. Alert when a parser's output shape changes rather than when it throws, because the expensive failure is a parser that silently starts returning fewer fields.
Normalise and deduplicate. The hard one. Detailed below.
Serve. Search, filter, display. Standard web engineering, and the part most teams over-invest in early because it is the visible part.
Deduplication is where aggregators are won or lost. The same job is posted to four boards with different titles. The same property appears through three agents at different prices. The same product has a different name at every retailer. Users judge you almost entirely on this: a listings site showing the same thing six times reads as broken regardless of how complete it is.
The approach that works is layered, cheapest first:
Exact identifiers. ISBNs, part numbers, registration numbers, source IDs. Where they exist, use them and stop — they solve the problem completely.
Normalised keys. Build a canonical key from lowercased, whitespace-collapsed, punctuation-stripped fields: employer plus title plus location; postcode plus bedroom count plus floor area. Catches a large share cheaply.
Fuzzy matching. Token-based similarity on titles and descriptions, with a threshold you tune against a hand-labelled sample. Necessary and expensive; restrict it to candidates that already share a coarse key, or it becomes an all-pairs comparison you cannot afford.
Manual review for the ambiguous middle. Accept that some fraction needs a human. Build the queue early rather than after users complain.
Two design decisions that save pain later: keep every source record separately and link them to a canonical entity, rather than merging destructively — you will get merges wrong and need to undo them. And log why two records were merged, because "why is this listing showing the wrong price" is a question you will be asked and cannot answer from merged data alone.
Freshness, Scheduling and What It Costs
Freshness requirements vary enormously and drive your entire cost structure.
| Type | Acceptable staleness | Implication |
|---|---|---|
| News | Minutes | Feed-driven, push where possible |
| Jobs | Hours to a day | Daily crawl adequate for most sources |
| Property | Hours | Frequent checks on active listings only |
| Prices | Minutes to hours | The expensive one |
| Events | Days | Weekly is usually fine |
The mistake that ruins budgets is crawling everything at the frequency the most volatile item needs. The fix is tiering: crawl what changes often, often; crawl what changes rarely, rarely; and use lastmod from sitemaps and conditional requests to skip unchanged content entirely.
Removal detection is the freshness problem nobody plans for. A filled job or a sold house needs to disappear, and sources rarely announce it. You need either a signal (the page 404s, a status field changes) or a policy (records unseen in three crawls are marked inactive). Get this wrong and your aggregator fills with dead listings, which is the second most common reason users stop trusting an aggregator after duplicates.
Cost scales with fetches, not with records. Ten thousand listings checked hourly is 240,000 fetches a day; the same listings checked daily is 10,000. Same data, a twenty-fourfold difference in bandwidth and in the load you put on sources. Every hour of acceptable staleness is money.
Where Proxies Fit and Where They Do Not
Our end of the pipeline, described as accurately as we can manage.
You do not need proxies when: you are consuming feeds or APIs, your volume is modest, you are crawling from one location against sources that do not rate-limit, or you are still building and testing. This covers a lot of early-stage aggregators entirely.
You do need them when: you are crawling enough that a single address gets rate-limited; the content differs by region and you need to see multiple regions; you are running distributed crawlers and want them to look like distinct clients rather than one machine with several threads; or you need geographic accuracy for locale-specific pricing and availability.
Which type: datacentre for most crawling, because it is cheaper by a large factor and public listings pages usually do not require anything more. Ours starts at $0.14/GB, billed by traffic rather than per IP. Escalate to residential — from $0.79/GB — only where datacentre demonstrably fails or where you need consumer-network geolocation. New accounts get 1 TB of residential traffic free, which is enough to establish whether you need it at all. Figures from our pricing page, checked September 2026.
The cost driver nobody plans for: headless browsers. If your sources require JavaScript rendering, a browser fetches every image, font and script, and bandwidth goes up by an order of magnitude over raw HTTP. Block resource types you do not need. On metered bandwidth this is the largest single lever available, and we covered the wider economics in our proxy pricing guide.
And the honest limit: proxies solve distribution. They do not solve terms of service, they do not solve the database right, and they do not make a source want you there. If a site has told you not to crawl it, more addresses is not an answer to that; it is a way of ignoring it more efficiently.
Why Most Aggregators Fail
Not for technical reasons.
No unique value. Aggregating what everyone else aggregates produces a worse version of an existing site. The value has to be in coverage nobody else has, organisation nobody else offers, or a niche too small for the incumbents.
Duplicates. Covered above and worth repeating. This is the number one reason users leave.
Stale data. Dead listings destroy trust faster than missing listings, because a missing listing is invisible and a dead one wastes the user's time.
Maintenance burden exceeding value. Twenty hand-written HTML parsers is a part-time job forever. Every source you add increases fixed ongoing cost. Prefer sources with feeds; be willing to drop sources whose maintenance exceeds their contribution.
Chicken and egg. Aggregators need coverage to attract users and users to justify coverage. The way through is to be complete in something narrow rather than partial in something broad.
Legal problems arriving late. A cease-and-desist after you have built the business on one source is considerably more expensive than a partner conversation before you started. Talk to your largest sources early; some will be pleased about the traffic, and the ones that will not are better discovered on day one.
People Also Ask
Is it legal to build an aggregator website?
It depends on what you aggregate, from where, and how. Facts are generally not copyrightable while expression is, which is why storing structured data and linking to the source is the safer design. In the EU, the text and data mining exception, machine-readable rights reservations and the separate database right all apply. Get advice for anything commercially significant.
Where do aggregators get their data?
In order of preference: official APIs, partner and affiliate feeds, RSS and Atom, sitemaps, structured data embedded in pages, and only then HTML parsing. The most overlooked source is the partner feed — many industries publish complete datasets for aggregators because aggregators send them traffic. Ask before you build a crawler.
Do I need proxies to build an aggregator?
Not initially. Feeds and APIs need none, and modest crawling from one location usually does not either. They become necessary when volume triggers rate limits, when you need to see region-specific content, or when you run distributed crawlers. Datacentre bandwidth is the sensible default; residential only where it is demonstrably required.
How do aggregators handle duplicate listings?
Layered matching, cheapest first: exact identifiers where they exist, then normalised keys built from cleaned fields, then fuzzy similarity within coarse candidate groups, then human review for the ambiguous remainder. Keep source records separate and link them to a canonical entity rather than merging destructively.
What does robots.txt require me to do?
Since RFC 9309 it is a standard rather than a convention. Match by specificity rather than order, refresh the file at least daily, treat server errors as complete disallow, treat a 404 as no restrictions, and parse at least 500 KiB. Use a maintained library rather than writing your own parser.
How often should an aggregator update its data?
As rarely as your use case tolerates, because cost scales with fetch count. News needs minutes, jobs need hours, events need days. Tier your sources by volatility, use sitemap lastmod and conditional requests to skip unchanged content, and have an explicit policy for detecting removed listings.
Can I aggregate content from sites that block scrapers?
Technically you may be able to; whether you should is a different question. A block is a statement of intent, and routing around it does not change the terms, the database right, or the relationship. The better move is to ask about a feed — plenty of sites that block crawlers happily supply partner data.
What is the hardest part of building an aggregator?
Deduplication and freshness, by a wide margin. Fetching and parsing are solved problems with libraries. Deciding that two differently worded listings are the same thing, and noticing when one of them has quietly stopped existing, is where the engineering effort and the user trust both live.
Wrapping Up
The skill in building an aggregator is knowing which problems are real. Fetching content is not one of them — feeds, APIs, sitemaps and embedded structured data cover far more ground than people expect, and the teams that go straight to writing HTML parsers are usually solving a problem that had already been solved for them.
The real problems are downstream. Deduplication determines whether users trust your data. Removal detection determines whether they trust it a second time. Maintenance burden determines whether the project survives contact with twenty sources changing their markup independently. And the legal layer — copyright in expression, machine-readable TDM reservations, the EU database right, terms of service — determines whether the whole thing is a business or a liability.
Start narrow and complete rather than broad and partial. Prefer sanctioned sources at every opportunity, including asking sources directly, since a partner feed removes an entire category of problem at once. Add infrastructure — proxies included — at the point where you can point to the limit you have hit, not before.
