Section 5.2 · hard constraint
Sources and authorisation
Every adapter declares an authorisation basis. The ingest pipeline refuses to run any adapter whose basis is unset, and refuses to enable a public-web adapter until its authorisation record is signed off.
Two adapters are disabled and cannot be enabled from this screen. businessesforsale and daltonsbusiness stay off until docs/sources/AUTHORISATION.md holds a completed, signed-off record for each. The toggle reads the record. It does not accept an override.
Adapter registry
| Adapter | Authorisation basis | Flag | Rate limit | robots.txt | Cache | State |
|---|---|---|---|---|---|---|
| companies_house app/sources/companies_house.py |
official_api | SOURCE_COMPANIES_HOUSE_ENABLED=true | 600 req / rolling 5 min token bucket, Retry-After honoured |
Not applicable | ETag, 24 h TTL | Enabled |
| businessesforsale app/sources/businessesforsale.py |
public_web | SOURCE_BUSINESSESFORSALE_ENABLED=false | 1 req / 3 s per host | Fetched and honoured per request | ETag + Last-Modified, 12 h TTL | Blocked — record unsigned |
| daltonsbusiness app/sources/daltonsbusiness.py |
public_web | SOURCE_DALTONSBUSINESS_ENABLED=false | 1 req / 3 s per host | Fetched and honoured per request | ETag + Last-Modified, 12 h TTL | Blocked — record unsigned |
| manual app/sources/manual.py |
manual_entry | always on | Not applicable | Not applicable | Not applicable | Enabled |
| csv_import app/sources/csv_import.py |
manual_entry | always on | Not applicable | Not applicable | Not applicable | Enabled |
Bases available to an adapter: official_api, commercial_feed, licensed_partnership, written_permission, public_record, public_web, manual_entry. Unset means the pipeline refuses to run.
Enforced in the base class
Rules a public_web adapter cannot opt out of
- Pages reachable without a login, without a paywall, without defeating bot protection.
- robots.txt fetched and honoured for the configured user-agent before every request. A disallowed path is skipped and logged.
- Honest descriptive User-Agent carrying a contact URL.
- One request per 3 seconds per host, configurable downward only. Retry-After honoured, exponential backoff on 429 and 503.
- Cache-first with conditional requests. No re-fetch of an unchanged listing inside its TTL.
- Source URL and fetch timestamp recorded against every ingested field.
- Ingested listing figures tagged Broker provided — unverified.
- No CAPTCHA solving, no IP or user-agent rotation, no headless browser to defeat a bot check, no authentication, no members-only or NDA-gated page.
- A blocked source stops. It is logged to UNAVAILABLE.md and surfaced. It is not retried around.
Live budget
Companies House rate budget
- Environment
- COMPANIES_HOUSE_ENV=test
- API key
- COMPANIES_HOUSE_API_KEY from Infisical present
- Last 429
- None in this window
- Backoff state
- Idle
- Cache hit rate
- 72% over the last 500 requests
The budget is client-side. The bucket refuses the request before it leaves the process, so the platform never rides the limit and never relies on a 429 to stop.
docs/sources/AUTHORISATION.md
Template generated by the platform. The operator completes and signs it off.
| Source | Terms of use URL | Reviewed | Reviewer | Outcome | Constraints imposed |
|---|---|---|---|---|---|
| companies_house | developer.company-information.service.gov.uk terms | 21 Aug 2026 | Operator | Signed off | Attribution required. 600 req / 5 min. Personal data minimised. |
| businessesforsale | — to complete — | — | — | Not reviewed | — |
| daltonsbusiness | — to complete — | — | — | Not reviewed | — |
docs/sources/UNAVAILABLE.md
Sources that blocked the crawler, or that the platform declined to fetch. Nothing here is retried around.
| Source | Reason | First seen | Action |
|---|---|---|---|
| example-broker-a | Listing detail behind registration. Not fetched. | 18 Aug 2026 | Commercial licence enquiry recorded |
| example-broker-b | robots.txt disallows /businesses-for-sale/ for our user-agent. | 19 Aug 2026 | Path skipped permanently |
| example-broker-c | Bot protection challenge returned on first request. Stopped. | 20 Aug 2026 | Written-permission request drafted, not sent |
Sources on this list are surfaced to the operator on every search run so a blocked source never quietly disappears from the funnel.
AcquiScope produces analysis and modelling, not regulated investment advice. The source names on this screen are placeholders for the prototype. No source was contacted or fetched to produce this page.