Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/mspsoftware-net:mspsoftware-net-compare-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: MSP Software Compare API
version: 1.0.0
description: 'Read-only JSON API for MSP Software: categories, software listings and vendors. No authentication, no writes, no PII, no individual price reports.
The same data reaches machines four other ways: an MCP server at https://mspsoftware.net/mcp (Streamable HTTP, read-only), a short index at https://mspsoftware.net/llms.txt, every listing in one file at https://mspsoftware.net/llms-full.txt, and one listing as Markdown at https://mspsoftware.net/software/{slug}.md.
Human documentation, with the feeds, is at https://mspsoftware.net/api.
Facts, feature checklists, buyer guides, FAQ answers, aggregate ratings and reported-pricing aggregates on MSP Software may be quoted with attribution to MSP Software and a link to the page cited. Reviews are the reviewers'' own words and are not covered.'
contact:
email: contact@mspsoftware.net
servers:
- url: https://mspsoftware.net/api/v1
security: []
tags:
- name: Compare
paths:
/compare/{pair}:
get:
summary: Compare two published listings
operationId: getComparison
parameters:
- name: pair
in: path
required: true
description: Two slugs joined by "-vs-", e.g. "datto-rmm-vs-ninjaone". Either order answers.
schema:
type: string
responses:
'200':
description: Both listings in full, the merged feature checklist and the comparison page URL.
content:
application/json:
schema:
type: object
required:
- data
- meta
properties:
data:
$ref: '#/components/schemas/Comparison'
meta:
type: object
properties: {}
'404':
description: No resource at that slug.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Compare
components:
schemas:
SoftwareSummary:
type: object
title: SoftwareSummary
properties:
slug:
type: string
description: The product name in lower case with hyphens, e.g. "datto-rmm".
name:
type: string
tagline:
type: string
vendor:
type: object
properties:
slug:
type: string
name:
type: string
category:
type:
- object
- 'null'
description: The primary category only. Null while that category is not published.
properties:
slug:
type: string
name:
type: string
url:
type: string
format: uri
rating:
$ref: '#/components/schemas/Rating'
starting_price:
$ref: '#/components/schemas/StartingPrice'
free_trial:
type:
- boolean
- 'null'
deployment:
type: array
items:
type: string
featured:
type: boolean
description: 'Deprecated: the same value as sponsored.'
sponsored:
type: boolean
description: The product has a live paid placement somewhere on the site.
sponsorship_label:
type:
- string
- 'null'
enum:
- Sponsored
- null
description: 'The label the site shows on a paid placement: "Sponsored" when sponsored is true, else null.'
match:
type:
- string
- 'null'
enum:
- product_name
- vendor_name
- previous_name
- parent_vendor_name
- domain
- tagline
- null
description: 'Present on search results only: the field q matched, the best-ranked one when several do (a slug match counts as product_name). Null when there is no q.'
placement:
type: string
enum:
- sponsored
- organic
description: 'Present on search results only: "sponsored" for the at most two paid placements whose name matches q, shown first and labelled Sponsored; every other result is "organic" and ranked without regard to payment.'
via_vendor:
type:
- object
- 'null'
description: 'Present on a vendor''s products only: the child company that makes this product, or null when the vendor makes it itself.'
properties:
slug:
type: string
name:
type: string
compare_url:
type:
- string
- 'null'
format: uri
description: 'Present on alternatives only: the side-by-side comparison page for this product and the one it is an alternative to, or null when that pair is not comparable.'
SubRatings:
type:
- object
- 'null'
title: SubRatings
description: Mean of each sub-rating across published reviews, one decimal place out of 5. Null when the listing has no reviews; a field is null when no review scored it.
properties:
ease_of_use:
type:
- number
- 'null'
features:
type:
- number
- 'null'
support:
type:
- number
- 'null'
value:
type:
- number
- 'null'
StartingPrice:
type:
- object
- 'null'
title: StartingPrice
description: The vendor-published entry price. Null when the vendor publishes none.
properties:
minor:
type: integer
description: Integer minor units (pence, cents), never a decimal.
currency:
type: string
enum:
- GBP
- USD
- EUR
- AUD
- CAD
unit:
type: string
enum:
- endpoint
- workstation
- server
- user
- technician
- site
- mailbox
- tb
- tenant
- network_device
- connection
- client
- flat
description: 'What the price is charged per: endpoint, workstation, server, user, technician, site, mailbox, tb, tenant, network_device, connection (a concurrent remote session), client (a managed client organisation), or flat (one price for the account, read as "per month").'
period:
type: string
enum:
- month
- year
description: How often the unit price recurs.
Comparison:
type: object
title: Comparison
description: The two listings a /compare page shows, with the feature checklist rows it puts side by side.
properties:
a:
$ref: '#/components/schemas/SoftwareDetail'
b:
$ref: '#/components/schemas/SoftwareDetail'
features:
type: array
description: Every feature of the two primary categories, merged by name, with each side's mark.
items:
type: object
properties:
name:
type: string
a:
type: string
enum:
- 'yes'
- 'no'
- unknown
b:
type: string
enum:
- 'yes'
- 'no'
- unknown
eligible:
type: boolean
description: 'Whether the pair is worth comparing: a shared category, at least 5 marked features on each side, and a price or a review on one of them. The comparison page is noindex and unlinked when false.'
url:
type: string
format: uri
description: The comparison page, with the two slugs in alphabetical order.
ReportedPricing:
type: object
title: ReportedPricing
description: One (unit, currency) aggregate, only ever shown at 3 or more independent reporters.
properties:
unit:
type: string
description: 'What MSPs reported paying per: endpoint, technician, user, mailbox.'
currency:
type: string
n:
type: integer
minimum: 3
description: Independent reporters behind the aggregate.
median_minor:
type: integer
description: Median monthly price in minor units, normalised to one month.
low_minor:
type:
- integer
- 'null'
description: Lowest reported monthly price in minor units.
high_minor:
type:
- integer
- 'null'
description: Highest reported monthly price in minor units.
window_months:
type: integer
enum:
- 12
- 24
description: How far back the reports behind this aggregate reach.
latest_month:
type: string
description: Month of the most recent report, as YYYY-MM.
examples:
- 2026-08
auto_renew_yes:
type: integer
description: Reporters who said the contract auto-renews.
auto_renew_n:
type: integer
description: Reporters who answered the auto-renewal question at all.
typical_notice_days:
type:
- integer
- 'null'
description: Median notice period to cancel, in days.
min_quantity_reported:
type:
- integer
- 'null'
description: Smallest quantity any reporter bought at this price.
FaqItem:
type: object
title: FaqItem
properties:
question:
type: string
answer:
type: string
description: Plain text, markdown stripped.
Rating:
type:
- object
- 'null'
title: Rating
properties:
average:
type: number
description: Mean rating, one decimal place, out of 5.
count:
type: integer
description: Published reviews counted in the average.
SoftwareDetail:
type: object
title: SoftwareDetail
properties:
slug:
type: string
description: The product name in lower case with hyphens, e.g. "datto-rmm".
name:
type: string
tagline:
type: string
summary:
type:
- string
- 'null'
description: The lead paragraph of the listing page, plain text.
description:
type:
- string
- 'null'
description: The vendor description, plain text, markdown stripped.
editor_note:
type:
- string
- 'null'
deprecated: true
description: Deprecated. Always null; editorial notes are not public.
vendor:
type: object
properties:
slug:
type: string
name:
type: string
url:
type: string
format: uri
claimed:
type: boolean
description: Whether a verified vendor account holds this vendor.
primary_category:
type:
- object
- 'null'
description: Null while the primary category is not published.
properties:
slug:
type: string
name:
type: string
secondary_categories:
type: array
description: Up to two further published categories the product is also listed under.
items:
type: object
properties:
slug:
type: string
name:
type: string
url:
type: string
format: uri
website_url:
type: string
format: uri
pricing_url:
type:
- string
- 'null'
format: uri
featured:
type: boolean
description: 'Deprecated: the same value as sponsored.'
sponsored:
type: boolean
description: The product has a live paid placement somewhere on the site.
sponsorship_label:
type:
- string
- 'null'
enum:
- Sponsored
- null
description: 'The label the site shows on a paid placement: "Sponsored" when sponsored is true, else null.'
created_at:
type: string
format: date-time
description: When the listing was first published.
updated_at:
type: string
format: date-time
description: Moves only when the content or facts of the listing actually change.
editor_reviewed_at:
type:
- string
- 'null'
format: date-time
description: When MSP Software last checked the facts against the vendor site.
facts:
type: object
description: Vendor-published facts. A null means the vendor does not publish one, never a guess.
properties:
starting_price:
$ref: '#/components/schemas/StartingPrice'
free_trial:
type:
- boolean
- 'null'
free_version:
type:
- boolean
- 'null'
pricing_plans:
type: array
items:
type: object
properties:
name:
type: string
priceMinor:
type: integer
description: Integer minor units (pence, cents).
currency:
type: string
unit:
type: string
description: What the plan price is charged per.
period:
type: string
enum:
- month
- year
highlights:
type: array
items:
type: string
support_options:
type: array
items:
type: string
training_options:
type: array
items:
type: string
deployment:
type: array
items:
type: string
platforms:
type: array
items:
type: string
typical_sizes:
type: array
items:
type: string
description: MSP sizes, in technicians, that report using it.
hq_country:
type:
- string
- 'null'
founded_year:
type:
- integer
- 'null'
feature_list:
type: array
description: Grouped by category, since a product can carry secondary categories.
items:
type: object
properties:
category:
type: object
properties:
slug:
type: string
name:
type: string
features:
type: array
items:
type: object
properties:
key:
type: string
name:
type: string
supported:
type: string
enum:
- 'yes'
- 'no'
- unknown
note:
type:
- string
- 'null'
integrations:
type: array
description: What this vendor lists as an integration.
items:
type: object
properties:
name:
type: string
url:
type: string
format: uri
integrates_with_slug:
type:
- string
- 'null'
description: Set when the integration is itself a listing on this site.
integrated_by:
type: array
description: 'The other direction: listings on this site that name this product as an integration of theirs.'
items:
type: object
properties:
slug:
type: string
name:
type: string
url:
type: string
format: uri
category:
type: object
properties:
slug:
type: string
name:
type: string
faqs:
type: array
description: 'The FAQ shown on the listing page: generated from the facts first, then the editor-written questions.'
items:
$ref: '#/components/schemas/FaqItem'
alternatives:
type: array
description: Up to four ranked alternatives. The full ranked list, with a feature table, is the page at /software/{slug}/alternatives.
items:
$ref: '#/components/schemas/SoftwareSummary'
reported_pricing:
type: array
items:
$ref: '#/components/schemas/ReportedPricing'
review_summary:
$ref: '#/components/schemas/ReviewSummary'
sub_ratings:
$ref: '#/components/schemas/SubRatings'
Error:
type: object
title: Error
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
examples:
- not_found
message:
type: string
ReviewSummary:
type:
- object
- 'null'
title: ReviewSummary
description: Aggregate only. Never an individual review, never a reviewer identifier.
properties:
average:
type: number
description: Mean rating, one decimal place, out of 5.
count:
type: integer
distribution:
type: array
description: Five entries, 5 stars first.
items:
type: object
properties:
star:
type: integer
minimum: 1
maximum: 5
count:
type: integer
externalDocs:
description: API documentation
url: https://mspsoftware.net/api