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.

RequestWhat 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

FieldWhat 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"
}