For agents and vendors
The PR software map for agents and vendors
By Newsprint ยท Last updated
Read any company's row on the map through an API or an MCP server, with no key, and see the rules every change to a row must meet.
The PR software map has one row per company: what it sells in 17 offering cells, its price, and its dated launches from the Newsprint launch record. An agent can read any row through the API or the MCP server below, with no key.
Vendors will be able to claim their own row and propose changes to it, each backed by a public source. The rules below apply to every change.
The API
Base URL: https://newsprint-engine.fly.dev. No key is needed. Each address can make 120 requests a minute.
| Request | What it returns |
|---|---|
GET /api/map/companies?q=&category= | Every row: slug, name, site, category and summary. q matches a name, an alias or a slug. category is a category key, such as ai_assistant. |
GET /api/map/companies/{slug} | One row in full: the row as published, its 17 offering cells as {v, q, u}, its price, how it announces news, its launches, and updatable_fields: every field a change can name, with the value the map shows now. For an offering cell, that value is the cell's v, and the whole cell is beside it as cell. |
GET /api/map/schema | The JSON Schema of a change: one change, or a list of up to 20. |
GET /api/map/changes?since=YYYY-MM-DD | The public change log, newest first. since is optional. |
A row's slug is its company's slug in the launch record. A row with no record company has the key map: plus its name in lowercase, with each run of other characters as one hyphen, such as map:acme-pr. A name works in place of a slug too.
An unknown slug answers 404. A bad category or since answers 422. When the map cannot be read, the API answers 503: try again in a minute.
The MCP server
URL: https://newsprint-engine.fly.dev/mcp. It speaks Streamable HTTP and needs no key. Its tools run the same code as the API, so both return the same data.
-
search_companies: find rows by name, alias, slug or category. -
get_company: read one row, with every field a change can name. -
list_launches: a company's launches from the launch record, newest first. -
changes_since: the change log, from a date. -
get_update_schema: the JSON Schema of a change.
The rules for a change
- A public page is the only evidence. Emails, screenshots, demos and walkthroughs do not count.
- What the product does comes from the vendor's own site, docs or help center.
- Funding and investors come from a press release, the vendor's own announcement, or an investor's public page.
- Data aggregators do not count.
- Each change names one field and quotes the exact words on its page, up to 500 characters, with 1 to 5 pages.
- A claim lets a vendor propose changes to its own row only. It never marks a row as verified and never changes how a row is shown.
- The map's other rules still hold: what earns a row, the category rules, and the test that a launch has shipped or is in beta.
- Newsprint never fetches an evidence URL when a change arrives. A reviewer opens each page and checks the quote.
The fields a change can name
| Field | What it changes |
|---|---|
summary | The row's description of what the company sells. |
price | The row's price: the low and high monthly price and a note. |
status | Whether the company is active, acquired or defunct. |
funding | A funding round in the launch record. |
launch.add | A launch that is not in the record yet. It must have shipped or be in beta. |
launch.date | The date of a launch already in the record. Name the launch by its id. |
offering.req | The offering cell "Journalist requests". |
offering.news | The offering cell "Story ideas & newsjacking". |
offering.opps | The offering cell "Podcast, speaking & award slots". |
offering.db | The offering cell "Media database". |
offering.match | The offering cell "Media-list building". |
offering.pitch | The offering cell "Pitch writing". |
offering.write | The offering cell "Press releases & content". |
offering.send | The offering cell "Sending & follow-up". |
offering.crm | The offering cell "PR CRM". |
offering.dist | The offering cell "Distribution & newsroom". |
offering.mon | The offering cell "Media monitoring". |
offering.report | The offering cell "Measurement & reporting". |
offering.aiv_track | The offering cell "AI-answer tracking". |
offering.aiv_sources | The offering cell "Cited-source targeting". |
offering.aiv_optimize | The offering cell "AI-answer optimization". |
offering.auto | The offering cell "Pitching agents". |
offering.human | The offering cell "Humans do the work". |
For an offering cell, current and proposed are one of the cell values: yes, partial, no or unknown. The quote and the URL come from the evidence: a yes or a partial on the map carries the vendor's own words (q) and the page they are on (u).
An example change
One change, as JSON. The schema is at https://newsprint-engine.fly.dev/api/map/schema.
{
"company": "acme-pr",
"field": "offering.report",
"current": "no",
"proposed": "yes",
"evidence": [
{
"url": "https://www.acme-pr.example/features/reporting",
"quote": "Every placement lands in one coverage report you can share.",
"published": "2026-11-01"
}
],
"agent": "Acme's research agent"
}