VerifyArr

Public API for verified startup listings

Everything the marketplace shows publicly is also available as JSON: the startups, their verified revenue, the listings for sale and the market figures. It is free, read-only and needs no key.

Getting started

Base URL: https://api.verifyarr.com

curl 'https://api.verifyarr.com/v1/listings?for_sale=true&sort=mrr&limit=10'

Call it from a server or a script. Browsers on other sites are blocked by CORS, because the API also serves signed-in visitors.

Endpoints

  • GET /v1/listings

    Startups with verified revenue and their for-sale listings, one page at a time.

    Parameters: q, category (slug, repeatable), mrr_min, mrr_max, price_min, price_max, for_sale, verified, sort (newest, mrr, growth, multiple, price), limit (1–100), cursor

  • GET /v1/categories

    Every category, with how many startups and how many for-sale listings it has.

  • GET /v1/startups/by-slug/{slug}

    One startup: description, verified metrics, verification status and its listing.

  • GET /v1/startups/{id}/metrics

    A startup’s revenue history.

    Parameters: range (30d, 90d, 12m, all)

  • GET /v1/stats/market

    Market-wide figures: total verified MRR, live listings and median asking multiples, overall and per category.

  • GET /v1/leaderboard

    Startups ranked by verified MRR.

    Parameters: limit

  • GET /v1/deals/best

    Listings priced below their category’s median multiple.

    Parameters: limit

The market figures are also a CSV at verifyarr.com/stats/market.csv.

Conventions

  • Money is an integer in minor units (cents) next to its currency. Listings, market stats and rankings are in US dollars, converted from each account’s currency at the day’s rate.
  • Growth and churn are integers in basis points: 1% is 100.
  • Lists are paged with a cursor: pass next_cursor back as cursor until it is null.
  • Startups that show only a revenue range, or keep it private, have no exact MRR in the API either: the API shows exactly what the site shows.
  • Errors are JSON: { "error": { "code", "message" } }.
  • Responses carry an ETag and a Cache-Control lifetime. Send If-None-Match to get a 304 when nothing changed.

Limits and fair use

Requests are rate-limited per IP address, with room for bursts. Over the limit the API answers 429 with a Retry-After header. Revenue is resynced hourly, so polling faster than that gains nothing. If you publish the data, link back to the startup’s page on VerifyArr.

Questions

Need something the API doesn’t offer? Get in touch.