Carroway Research Note 06: how the advertise pages were read on 29 September 2026 1. Pages. The 1,400 page addresses in the first query of queries.sql, each requested once on 29 September 2026 with an ordinary browser user agent. Pages that timed out or answered HTTP 202, 429 or 503 were requested once more, slowly. Pages on sponsorgap.com were not read: that directory shows one preview price per newsletter and keeps exact rates behind a sign-up, so its figures are not prices the newsletter published. 2. Text. Scripts, styles and markup were removed and each block of text was kept apart, so an item's name, its price and its description stay in order. For each page the model saw the first 1,500 characters (name, list size) and the text around every dollar amount, up to 12,000 characters. 3. Reading. A language model (OpenAI gpt-5.4-mini, low reasoning effort, JSON output) read each page with the instruction below and listed every priced item, grouped by the newsletter it belongs to. 4. Rules applied to what the model returned (these decide every number in the note): - the item is for the email newsletter (not a website, podcast, video, social, print, event or job board ad); - it is one placement: a main slot, another slot inside the issue, a classified or text ad, or a dedicated send; - the price buys one issue or one send (weekly, monthly and multi-issue prices are left out); - the price is in US dollars, between $10 and $100,000, and the same number is printed on the page; - the page sells ads. A newsletter's price for a placement is the cheapest kept price for it. Where the same newsletter appeared on two pages, its rows were merged. List size is the subscriber count the newsletter states on the same page, and the per-subscriber figures use only newsletters that state a list of 500 or more. 5. The instruction given to the model, word for word: You extract advertising prices from a newsletter's sponsorship, advertise, media kit or rate-card page. Return JSON: {"is_ad_sales_page": boolean, "publications": [{"name": string, "domain": string|null, "subscriber_count": integer|null, "open_rate_pct": number|null, "items": [{"name": string, "price_text": string, "price": number, "currency": "USD"|"other", "channel": "newsletter"|"podcast"|"video"|"social"|"website"|"print"|"event"|"job_board"|"other", "kind": "primary"|"secondary"|"classified"|"dedicated"|"bundle"|"other", "issues": integer|null, "per": "issue"|"send"|"week"|"month"|"year"|"cpm"|"click"|"other"}]}]} Rules: - publications: group the priced items by the newsletter or publication they belong to. Most pages sell ads in one newsletter. Some storefronts and publisher pages list several newsletters, each with its own subscriber count and prices: give each one its own entry, and never put one newsletter's items under another. "domain" is that publication's website if the page prints it. - subscriber_count: that publication's email subscriber count as the page states it (e.g. "100,000+ subscribers" or "Subscribers 4K" -> 100000 or 4000). Null when the page gives none for that publication, or gives only website visitors, social followers, podcast downloads or print circulation. Never add up several newsletters. - items: every item with a printed price. "name" is the item's name copied from the page. "price_text" is the price exactly as printed. "price" is that amount as a number (the lower end of a range). currency "other" when the price is not in US dollars (C$, A$, £, €, and so on). - channel: "newsletter" only for an ad inside the email newsletter or an email sent to its list. Website banners, podcast reads, YouTube or video, social posts, print pages, events, webinars and job boards get their own channel. - kind (for newsletter items): "primary" = the main, top, headline, title or presenting sponsor slot of one regular issue. "secondary" = any other ad inside an issue (mid-issue, bottom, native, sponsored story, image or banner inside the email). "classified" = a short text ad, link, listing, job post or tool mention inside an issue. "dedicated" = a whole email sent to the list for one advertiser (solo or dedicated send). "bundle" = one price for several placements, several issues or several channels. "other" = anything else. - issues: how many newsletter issues or sends the price buys (1 for one placement in one issue). "per": what the price is for. - Do not invent publications, items, prices or counts. If the page does not sell ads (a blog post, a consulting page, an event), set is_ad_sales_page false and still list priced items.