The questions to answer before collecting data from a competitor site, and what the robots standard says: identify yourself, rate limits, 429 and provenance.
Key takeaways
- The legal half of the checklist stays as questions. Terms of use, robots directives, copyright and privacy law exist and govern collection; which of them applies to your site is a question for someone qualified to answer it.
- The technical half is concrete: identify yourself, respect rate limits, prefer an official feed or interface, cache so you do not re-request, and record what you took and when.
- RFC 9309 specifies that a crawler's product token should appear as a substring of the `User-Agent` header, and that a robots file may be cached but should not be used from cache for more than 24 hours.
- The same standard draws a distinction people miss: a 4xx response for robots.txt means no rules apply, while a 5xx response means the crawler must assume a complete disallow.
- When the honest answer is "they publish a feed" or "you could simply ask them", that is the answer. This article does not describe any way around a block, a login or a paywall.
This is a list of questions, not answers. Before the first request to a competitor's site, four need answering: what exactly will be collected, what the site's terms of use say, what robots directives it publishes, and whether the data contains details about people. The answer for a specific site belongs to you and your lawyer.
The questions to answer before the first request
Write the answers in one document. If any of them is blank, the project is not yet defined:
- What exactly is collected? An explicit field list, not "whatever is on the page".
- What is it used for? Internal analysis, a pricing decision, a product you sell, or republication. Those are entirely different cases.
- What do the site's terms of use say about automated access, and was explicit agreement required to reach the content at all.
- What directives does the site publish in its robots file, and what do they say about the paths you care about.
- Does the collected content include protected creative work, rather than only facts such as a price or availability.
- Does the data contain anything that identifies a person, even where it is publicly displayed.
- How long do you retain it, and who deletes it.
- Who on your side signs off that the answers above were obtained, and when they get revisited.
These are not bureaucracy. They are what lets you answer calmly if someone asks, and they shorten the project, because most projects shrink dramatically the moment somebody writes an explicit field list.
What does the robots file actually specify?
RFC 9309 describes the robots exclusion protocol, and it is a technical standard rather than a legal one. Several points change the implementation:
- A crawler picks its own product token. The standard requires it to contain only letters, underscores and hyphens, and says it should appear as a substring of the identification string the crawler sends, which for HTTP is the
User-Agentheader. - Matching a token against groups in the file is case-insensitive, and when several groups match they are merged into one.
- If no group matches, the crawler must obey the
*group if one is present. If that is absent too, no rules apply. - A server status in the 400 to 499 range for robots.txt means the file is unavailable, and the crawler may then access resources on the server.
- A status in the 500 to 599 range means the file is undefined, and the crawler must assume a complete disallow. That is the distinction people get backwards: a server-side failure is not permission.
- The file may be cached, but not used from cache for more than 24 hours unless it is unreachable.
- A parser must handle at least 500 kibibytes, and a crawler should follow at least five consecutive redirects.
Robots directives do not govern what you may do with data once it is collected. They state which paths crawlers are asked not to fetch. Those are two separate questions, and conflating them is the most common confusion in this field.
How do you request without harming a server that is not yours?
This is the central technical question, and it has measurable answers:
- Send a
User-Agentthat identifies who you are, with a way to reach you. Anyone looking at unidentified traffic assumes the worst, reasonably. - Prefer an official feed or a documented interface over reading a page. It is more stable and cheaper for both sides.
- Rate-limit, and treat a 429 as RFC 6585 defines it: it indicates too many requests were sent in a given amount of time, and it may include a
Retry-Afterheader saying how long to wait. Wait that long rather than retrying immediately. - Use conditional requests and caching as set out in RFC 9111 so you do not re-fetch content you already hold. Fewer requests mean less load and less chance of being blocked.
- Run at low-traffic hours, at a rate you would be willing to defend out loud in a conversation.
- Stop when you are blocked, and look at why. A block is an answer, not a fault to route around.
The first step on that list is also the cheapest: check whether an official interface exists at all. The full ordering between an interface and page reading is in scraping versus an API, and how to bound the project itself is in how to scope a web scraping project.
Who answers each question, and what gets recorded
| The question | Who answers it | What is recorded |
|---|---|---|
| What is actually collected | Whoever defines the project | Field list and a one-line purpose |
| What the terms of use say | Your own legal adviser | The review date and who did it |
| What the robots directives say | The developer | A copy of the file as read, with a date |
| Whether personal data is present | The definer, with legal input | A flag on the relevant fields |
| What request rate to use | The developer | The chosen rate and its justification |
| When this gets reviewed again | The process owner | The next review date |
That table is also the escalation line. A row whose answer is beyond the authority of whoever runs the project moves in one line to whoever does hold that authority, carrying the date an answer is needed.
What you record about every row you collect
A data source without provenance is not data, it is hearsay. For every stored record:
- The exact source address it was read from, not the name of the site.
- The retrieval timestamp, on one consistent clock.
- The response code actually received.
- The identifier of the run that collected it.
- A stored raw capture, or its identifier, for a later dispute.
- The rule or field the value was extracted from, so that when the page structure changes you can see what moved.
That metadata is what lets you answer "where did this value come from" without going back to the site. It is also what turns a complaint about a wrong figure into a one-minute check rather than an argument.
Sources
Frequently asked questions
Is it allowed to scrape a competitor's website?
The answer depends on the site, the data and the use, and it is a question for you and your lawyer. What can be said is that terms of use, robots directives, copyright and privacy law exist and govern collection. This article exists to make sure the questions are asked before the first request rather than after it.
What do you do when the robots file is not reachable?
Distinguish two cases. Under RFC 9309, a 400 to 499 response means the file is unavailable and the crawler may access resources, while a 500 to 599 response means it is undefined and a complete disallow must be assumed. After a long unreachable period the standard allows treating it as the first case.
Does identifying ourselves in the header invite a block?
It lets the other side decide, which is the point. A site operator who knows who is calling and at what rate can allow it, throttle it, or contact you. This article does not cover concealing identity, and if a plan depends on not being recognised, that is a sign the questions in the first section are still unanswered.
When is it better to simply ask the competitor or the supplier?
More often than people expect. Many suppliers publish a feed, a catalogue or a customer interface, and a lot of data that looks like it needs scraping can be obtained by asking for it. It is faster, more stable, it survives the next redesign of the site, and it retires most of the question list above.
Keep reading
Related service
Web Scraping
Reliable web scraping and data pipelines that deliver clean data.
About the author
Yehonatan Saadia
Freelance automation, web & MVP developer
I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.
Work with meHave a project like this?
Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.
