ByeBuy.ai
BUILD YOUR ESCAPE ROUTE · ✦ CURSOR · HOST IT · ◫ SUPABASE · CONNECT IT · ↯ RELAY · BUILD YOUR ESCAPE ROUTE · ✦ CURSOR · HOST IT · ◫ SUPABASE · CONNECT IT · ↯ RELAY ·
← BYEBUY NOTES

September 12, 2026

THE FIVE QUESTIONS TO ASK BEFORE YOU USE A DATA SOURCE

The Five Questions to Ask Before You Use a Data Source

Lesson 19.1 gave you the vocabulary: dataset, provider, API, website, scraping. Now you need the judgment. Every source that enters your product — whether found in the ByeBuy Data directory or suggested by an AI agent — must pass the same five questions. No exceptions, no "we will check later."

This is the canonical evaluation method for the rest of Part VI. Classes 20–23 will assume you can do it.

The five questions — runnable checklist

Run these in order. Each ends with what-good-looks-like, so you know when to move on.

1. Who produced the data, and are they close to the fact? Check: find the owner page (About / Methodology), not the wrapper's homepage. Copy the original URL. What-good-looks-like: Owner: U.S. SEC — docs: https://www.sec.gov/search-filings/edgar-application-programming-interfaces — not "a finance site." If you can only name the wrapper, write Owner: unknown — must check before production and keep digging.

2. What exactly does each field mean — unit, geography, time period? Check: open one series/filing/observation and copy ID + unit + geo + period into your notes. What-good-looks-like (FRED): series page shows Series ID: UNRATE | Units: Percent | Seasonal Adjustment: Seasonally Adjusted | Geography: United States | Frequency: Monthly. Keep all five with every fact. For Belgium via World Bank: Indicator: SL.UEM.TOTL.NE.ZS | Country: BE | Date: 2023 | Unit: % of total labor force. What-good-looks-like (EDGAR JSON): open a companyfacts response and confirm field names exist before you code: {"cik": 320193, "facts": {"us-gaap": {"Revenues": {"label": "...", "units": {"USD": [{"val": 383285000000, "fy": 2023, "fp": "FY", "filed": "2023-11-03", "form": "10-K"}]}}}}} If you cannot point at val + fy/fp + filed + units, you do not yet know what the number means.

3. How current is it, and how is it revised? Check: find the release calendar / update schedule + the revisions note. Store fact date AND retrieval time. What-good-looks-like: FRED UNRATE: monthly release, first Friday; vintage available; stored as fact_date=2024-01-01 + retrieved_at=2024-02-05T10:00Z. "Latest value" with no dates is a fail.

4. What can the product legally and technically do with it? Check: open Terms + Docs rate-limit section at build time. Copy the exact line. What-good-looks-like: License line: "World Bank data CC-BY 4.0 — attribute World Bank on display (checked 2026-09-11)" + Limit: FRED API key required, 120 req/min; EDGAR fair-access: max 10 req/sec, server/CLI only for data.sec.gov, User-Agent required. "No license stated" means write License: unknown — treat as all-rights-reserved until cleared, not "free to use."

5. What happens when it is missing, late, changed, or wrong? Check: write one fallback per failure before you commit. One sentence each. What-good-looks-like: Missing month → show "no observation for 2024-02 (as of 2024-03-10)"; API down → serve cached value with date banner; field renamed → log schema diff and block new claims; value revised → keep both vintages, display latest with "revised" tag.

The source card

Do not keep these answers in your head. Write them on a source card — one small file per candidate source that you, a teammate, or an AI agent can read later. It prevents the most common agent failure in Part VI: the agent inventing a provider or quietly swapping in an unofficial endpoint because no approved source was written down.

# SOURCE-CARD: <dataset name>

- Source URL (docs):
- Owner (who vouches):
- Access method (API / MCP / file / export):
- Freshness (update schedule + latency):
- License / terms link:
- Rate limit / key / fair-access notes:
- Important fields (with unit, geo, period):
- Revisions policy:
- Failure plan (missing / late / changed):

Seven or eight lines is enough. The rule is strict: a source is not approved until every field has an answer or an explicit "unknown." "Unknown — must check before production" is an honest answer. A blank is not.

Filled example — copy the shape, not just the column names:

# SOURCE-CARD: Belgium unemployment — World Bank SL.UEM.TOTL.NE.ZS
# Verdict: APPROVED for prototype (macro context only, not legal-grade labor claim)

- Source URL (docs): https://datahelpdesk.worldbank.org/knowledgebase/articles/889392-about-the-indicators-api-documentation
- Owner (who vouches): World Bank wrapping ILO modelled estimates (origin: Statbel Labour Force Survey) — https://data.worldbank.org/indicator/SL.UEM.TOTL.NE.ZS?locations=BE
- Access method (API / MCP / file / export): API — https://api.worldbank.org/v2/country/BE/indicator/SL.UEM.TOTL.NE.ZS?format=json&per_page=5
- Freshness (update schedule + latency): Annual indicator, ~9-month lag; fact date = calendar year, store retrieved_at separately
- License / terms link: CC-BY 4.0 — must attribute World Bank on display (terms checked 2026-09-11)
- Rate limit / key / fair-access notes: No key for basic use; cache 24h, max 1 fetch/day for this indicator
- Important fields (with unit, geo, period): indicator=SL.UEM.TOTL.NE.ZS, country=BE, date=YYYY, value=% of total labor force
- Revisions policy: ILO model revisions possible; keep prior vintage when value changes, tag "revised"
- Failure plan (missing / late / changed): Missing year → show "no observation for YYYY (as of DATE)"; API down → serve cached with date banner; never substitute another country's rate

A note on freshness of *your own notes*: terms, limits, and pricing must be refreshed at build time. Write the date you last checked the terms on the card. A card from six months ago is a lead, not a license.

Visual: the source scorecard

When comparing two candidates, lay the five questions out as rows:

Question                        │ Candidate A: official API      │ Candidate B: wrapper site
────────────────────────────────┼───────────────────────────────┼────────────────────────────
1. Who is close to the fact?    │ Owner = publisher ✓           │ Third party, no provenance ✗
2. Field meaning (unit/geo/time)│ Documented series + units ✓   │ Numbers, no definitions ✗
3. Current + revised?           │ Schedule + vintage kept ✓     │ Unknown refresh, no history ✗
4. Legal + technical allowed?   │ Terms link, key, limits ✓     │ ToS forbids scraping ✗
5. Missing/late/changed plan?   │ Fallback + cache plan ✓       │ No plan ✗

The scorecard rarely flatters the convenient option. That is its job.

Practical exercise

Fill out SOURCE-CARD.md for one candidate source behind a real product question — for example, Belgian unemployment (19.1), a company's latest filing, or a city's 7-day forecast.

1. Start from the ByeBuy Data directory, then click through to the original owner's docs. 2. Complete every field in the card above. Use "unknown — must check" rather than guessing. 3. Mark the source APPROVED or REJECTED with one sentence of evidence.

Finish line: a committed SOURCE-CARD.md with no blank fields, plus an APPROVED/REJECTED verdict.

Verify: hand the card to someone (or an agent) who has not seen your research. Can they fetch the same fact from the URL + access method alone? If not, the card is incomplete.

Common failure mode: copying the directory listing as the "source URL" instead of the owner's documentation page. The directory is discovery; the owner's docs are the contract.

Check your understanding

1. Why must you store both the *fact date* and the *retrieval time* for an economic series? 2. A source has no stated license. Is that permission or a warning — and what do you write on the card? 3. Why does an explicit "unknown" count as an answer while a blank does not?

Transition

You can now judge a single source. But "free" is the judgment-killer: the next lesson shows why free is a price, not a strategy — and how to choose a prototype source for the right, non-price reason.

ARTICLE DISCUSSION

JOIN THE
CONVERSATION.

0 COMMENTS

BYEBUY ACCOUNT ACCESS

Sign in

Use your account to save routes and make the catalogue yours.

Enter your email and we’ll send a secure sign-in link and code.

NEW ROUTES ADDED WEEKLY · 9,235 CATALOGUE ENTRIES · BUILD · DEPLOY · QUERY · STACK · SAY BYE TO BUY · NEW ROUTES ADDED WEEKLY · 9,235 CATALOGUE ENTRIES · BUILD · DEPLOY · QUERY · STACK · SAY BYE TO BUY ·