SaaS Ranking

Data and API

Everything on this site is available as JSON, read only, without a key. 6 endpoints, CC BY 4.0, one rule that shapes all of it.

No field is ever a boolean. "iso_27001": true would be the sentence “this vendor is certified” – a statement of fact about a real company. What you get instead is found, not_found or not_measured, each with the address we read it at and the date. not_found means we did not find it at the addresses listed in checked; it is not a statement that the vendor has none.

Endpoints

EndpointAnswers
/api/v1/criteriaWhat do you measure, and how is it weighted?
The full catalogue with the weight of each criterion. This is the same source the methodology page reads.
/api/v1/categoriesWhich categories exist?
Every category we have measured at least once, with the number of vendors in it.
/api/v1/categories/crmWho is in a category, and in what order?
The ranking of one category: rank, score, and how many criteria we could measure for each vendor.
/api/v1/vendors/stripe.comWhat did you find at one vendor?
One vendor by domain, with every criterion, its source, the addresses we checked, and the quotes we read.
/api/v1/detailsWhat values did you read off their pages?
The catalogue of measured details: certifications named, hosting locations, uptime figures, subprocessors, third-party hosts.
/api/v1/details/certificationsWhich vendors name a given value?
One detail type with every value that has enough vendors to have a page.

All of them are GET. Anything else answers 405: corrections go through the form so a human reads them. Access-Control-Allow-Origin: * is set, so you can call them from a browser.

Fields every response carries

FieldWhat it means
snapshotThe id of the data snapshot this response was rendered from, for example r42.71638. Two figures are only comparable when they carry the same id.
snapshot_runThe highest completed measurement run that contributed to the snapshot.
snapshot_resultsHow many results the snapshot holds. It moves when a partial run lands, even if the run number does not.
snapshot_measured_throughThe newest measurement timestamp in the snapshot.
licenseThe licence the figures are published under: CC BY 4.0. Attribution is the link back.
score_versionThe version of the transparency score. It is frozen, and a new criterion does not change an existing figure.

The three states, and the fourth thing that is not a state

ValueWhat it meansWho it describes
foundWe found it, and source is where.the vendor
not_foundWe reached at least one address and none of them carried it. checked lists which.the vendor
not_measuredWe reached no address at all, or robots.txt asked us not to. It falls out of the numerator and the denominator of the score.us

A quoted detail carries a fourth thing, and it is not a state but a subject: whose sentence it is. anbieter (the vendor itself), infrastruktur (their data centres or infrastructure), dienstleister (a named provider of theirs), erwaehnt (named without a certification claim), unklar (unclear from the sentence). Only anbieter is aggregated into a value page – a sentence about a vendor's data centre does not belong in a list called “vendors that name ISO 27001 for themselves”.

The score

The score is Transparency Score v1: the share of the summed weights of 12 criteria that we found. It is frozen. Adding a criterion would change every figure ever published, including the one in a procurement file from last week, without the vendor doing anything; new criteria are therefore measured and returned as facts and do not enter the figure. Below 9 measured criteria there is no score at all – score is null, never 0.

BandScore
A85 to 100
B70 to 84
C55 to 69
D40 to 54
E25 to 39
F0 to 24

The 12 criteria

KeyNameWeightScored
dpaData processing agreement3yes (v1)
subprozessorenSubprocessor list3yes (v1)
datenregionData location stated3yes (v1)
statusseiteStatus page with history2yes (v1)
preisePublic pricing2yes (v1)
zertifizierungenCertifications named1yes (v1)
slaUptime SLA with a figure1yes (v1)
transportHTTPS enforced with HSTS2yes (v1)
tracker_vor_einwilligungNo third-party tracking before consent2yes (v1)
security_txtsecurity.txt (RFC 9116)1yes (v1)
subprozessor_meldungNotice before subprocessors change2yes (v1)
datenschutzkontaktNamed privacy contact1yes (v1)

The 10 detail types

KeyNameFrom criterionHas value pages
zertifikatCertification namedzertifizierungenyes
datenregionHosting location nameddatenregionyes
sla_prozentUptime figureslayes
subprozessorSubprocessor namedsubprozessorenyes
meldefrist_tageSubprocessor notice periodsubprozessor_meldungyes
datenschutzkontakt_artPrivacy contactdatenschutzkontaktyes
drittanbieterThird-party host on first loadtracker_vor_einwilligungyes
hsts_fristHSTS max-agetransportno
hsts_optionHSTS optiontransportno
security_txt_ablaufsecurity.txt expirysecurity_txtno

A response, in full

{
  "snapshot": "r6.60658",
  "snapshot_run": 6,
  "score_version": "v1",
  "license": "CC BY 4.0",
  "domain": "example.com",
  "score": 68,
  "measured": 12,
  "of": 12,
  "criteria": {
    "dpa": {
      "result": "found",
      "source": "https://example.com/legal/dpa",
      "checked": [
        {
          "url": "https://example.com/dpa",
          "outcome": "404"
        },
        {
          "url": "https://example.com/legal/dpa",
          "outcome": "200"
        }
      ],
      "note": null,
      "measured_on": "2026-09-04T02:41:18.000Z"
    },
    "security_txt": {
      "result": "not_found",
      "source": null,
      "checked": [
        {
          "url": "https://example.com/.well-known/security.txt",
          "outcome": "404"
        }
      ],
      "note": null,
      "measured_on": "2026-09-04T02:41:24.000Z"
    }
  },
  "details": [
    {
      "key": "zertifikat",
      "name": "Certification named",
      "value": "iso-27001",
      "subject": "anbieter",
      "quote": "We are ISO/IEC 27001 certified, audited annually.",
      "source": "https://example.com/trust",
      "measured_on": "2026-09-04T02:41:20.000Z",
      "path": "/data/certifications/iso-27001"
    }
  ]
}

Bulk: the evidence pack

Every vendor profile carries a downloadable pack for a procurement file, in two formats:

Both carry the snapshot id and the disclaimer. There is no PDF: the container that serves this page has no browser to render one, and the page itself prints.

Rate limits, and what we ask instead

There is no key and no counted quota. What we ask is the thing a rate limit would enforce badly: take the snapshot once and work from it, rather than fetching ten thousand vendor documents one at a time. A full copy of the ranking is /api/v1/categories plus one call per category.

If your use needs something we do not offer – a full dump, a webhook, an older snapshot – tell us. We would rather build the endpoint than watch someone scrape the pages.

Versioning

The path carries the version: /api/v1/. Inside a version we add fields and never repurpose one. A field that would have to mean something else gets a new name, and the old one keeps its meaning until the next version. The score has its own version, printed in every response, for the same reason.