Public API · v1
Ciroapp pricing API
Free JSON for the published list prices Ciroapp tracks: plans, monthly and annual prices, free plans, trials, verified price history, and the cheapest tools per category. No key, no sign-up.
Endpoints
GET /api/v1/software/{slug}/pricing.json: pricing for one tool. The slug is the last part of its Ciroapp URL (/software/{slug}).GET /api/v1/categories/{slug}/pricing.json: every approved tool in a category with its lowest price, plus the cheapest options for 1, 5, 10 and 25 users.GET /api/pulse/price-changes.json: verified SaaS price changes across all tools (?limit=1..500&category=&direction=increase|decrease).GET /llms-full.txt: one-line pricing summaries of the most-viewed tools, for LLMs and quick scripts.
Unknown or unpublished slugs return 404.
Examples
curl https://ciroapp.com/api/v1/software/{slug}/pricing.json
curl https://ciroapp.com/api/v1/categories/{slug}/pricing.json
curl "https://ciroapp.com/api/pulse/price-changes.json?limit=20&direction=increase"const res = await fetch('https://ciroapp.com/api/v1/software/{slug}/pricing.json')
if (res.ok) {
const data = await res.json()
console.log(data.name, data.fromPrice, data.currency, data.pricesCheckedAt)
}Tool response
| Field | Type | Meaning |
|---|---|---|
| name, slug | string | Tool name and Ciroapp slug. |
| url | string | Ciroapp page for the tool (link here when you attribute). |
| website | string | null | Vendor website. |
| category | string | null | Primary category. |
| currency | string | null | ISO 4217 code printed on the vendor price list. Null when the vendor shows no currency. |
| fromPrice, fromPlan | number | null, string | null | Lowest paid price per month in `currency` (the monthly-billing price, or the annual price per month when a plan is only billed annually), and its plan. Same figure as "From" on the software page. |
| plans[] | object[] | name, currency, monthly (per month, monthly billing), annual (per year), annualPerMonth, perUser, isFree, contactSales, introPrice (vendor intro offer; monthly/annual are always list prices), includedUsers, extraUserPrice (per extra user per month; base price covers includedUsers). Unparseable prices, usage units (per transfer, per hour...) and promo-only prices are null. |
| freePlan | boolean | The vendor lists a free plan. |
| trialDays, moneyBackDays | number | null | Only when the vendor states a number of days. |
| pricesCheckedAt | ISO date | null | When the listed prices were last verified against the vendor page. Null when they do not match the last check. |
| vendorPageCheckedAt | ISO date | null | When the vendor pricing page was last checked, whether or not the listed prices match it. |
| pricingPageUrl | string | null | Vendor pricing page. |
| history[] | object[] | Verified price changes, newest first: capturedAt and per-plan changes (plan, before, after, direction, pctChange). |
| source, attribution, license | string, object, string | Where the data comes from and how to credit it. |
Category response
| Field | Type | Meaning |
|---|---|---|
| name, slug, url | string | Category and its Ciroapp page. |
| currency | string | null | Majority currency in the category. Only tools priced in it are ranked. |
| toolCount, comparableCount | number | Approved tools, and tools that can be ranked in `currency`. |
| tools[] | object[] | name, slug, url, currency, fromPrice, freePlan, trialDays, pricesCheckedAt, vendorPageCheckedAt. |
| cheapest[] | object[] | For 1, 5, 10 and 25 users: the 3 cheapest tools (plan, perMonth for the whole team, billing, perUser, billedUsers, assumedOneLicencePerUser: flat plan with no stated user limit, priced once for the whole team and never ranked above stated-terms prices). |
| cheapestPageUrl | string | null | The matching /cheapest page when it is published. |
Attribution and license
Free to use, including commercially, with CC BY-style attribution: credit "Pricing data by Ciroapp" with a link to the source URL.
Show the credit wherever the data appears, next to the data, and link it to the url field of the response:
<a href="https://ciroapp.com/software/{slug}">Pricing data by Ciroapp</a>Also show pricesCheckedAt with prices: vendors change them, and readers should know how fresh they are.
Caching and rate limits
- Responses are cached for 1 hour (
Cache-Control: public, max-age=3600). Polling more often returns the same data. - CORS is open (
Access-Control-Allow-Origin: *), so you can call the API from a browser. - Up to 120 requests per minute per IP. Over the limit you get
429with aRetry-Afterheader. - For bulk needs, cache on your side and contact us instead of crawling every slug.
What the data is, and is not
- Published list prices from vendor pricing pages, before taxes, add-ons and discounts.
- Nothing is estimated: prices we cannot read stay null, and a currency is only given when the vendor prints one.
- No deals, coupons or discount codes.
Are you a vendor?
Embed the Ciroapp pricing badge on your site, or claim your listing to keep your prices up to date.