Zum Inhalt springen

Open Data · API v1

Offene Daten: unsere Daten als API

Kostenlos, ohne Schlüssel und ohne Anmeldung, nur lesend. Jeder Wert trägt die Quell-URL und das Datum, an dem wir ihn an der Quelle bestätigt haben.

Die Krabbe teilt. Mit Quellenangabe.

Das Wichtigste in Kürze

  • Kostenlos und offen lesbar. Kein Schlüssel, keine Anmeldung, kein Cookie. Jede Website darf die Daten per GET abrufen (CORS *).
  • Jeder Wert mit Beleg. Zu jeder Angabe gehören sources (Adresse, Art der Seite, Abrufdatum) und checkedOn (Datum der Bestätigung).
  • Unbekannt bleibt leer. Was wir nicht bestätigen konnten, fehlt – nie 0, nie null – und steht mit Grund unter open (Firma) bzw. gaps (Challenge-Zeile).
  • Regelversionen bleiben erhalten. Frühere und angekündigte Regeln stehen mit Startdatum, Geltungsbereich und Bestandsschutz neben den aktuellen.
  • Keine Note, keine Rangliste. Die API liefert Fakten, keine Bewertung. Der Partnerstatus steht nur zur Transparenz da.
  • Keine Klick- oder Partnerdaten. Keine Affiliate-Links, keine Klickzahlen, keine Vertragsdaten.

Endpunkte

Basis: https://propcrab.io. Jede Antwort ist application/json; charset=utf-8.

Endpunkte
Pfad (GET)Inhalt
/api/v1Übersicht der Endpunkte mit Beschreibung.
/api/v1/firmsAlle Firmen: Status, Märkte, Anzahl Programme, Datenstand, Partnerstatus.
/api/v1/firms/{slug}Eine Firma vollständig, wie veröffentlicht: Programme, aktuelle und frühere Regelversionen, Kontogrössen mit Preisen, Wohnsitz, Gesellschaften, Ereignisse, Warnungen, offene Punkte.
/api/v1/challengesEine Zeile je Programm und Kontogrösse mit den Regeln für einen Kauf heute.
/api/v1/changesDer Änderungsverlauf aller Firmen, neueste zuerst.
/api/v1/openapi.jsonDiese API als OpenAPI-3.1-Beschreibung.

Aufbau jeder Antwort

Jede Antwort hat zwei Teile: meta beschreibt die Datei, data enthält die Daten. Die Firmen kommen alphabetisch, die Challenge-Zeilen nach Firma, Programm und Kontogrösse, die Änderungen mit der neuesten zuerst.

generatedOn
Tag, an dem die Datei erzeugt wurde: beim Build, danach höchstens einmal täglich.
count
Anzahl Einträge in data.
dataAsOf
Ältestes Bestätigungsdatum in dieser Antwort. Jeder Wert wurde an oder nach diesem Tag bestätigt.
latestCheck
Neuestes Bestätigungsdatum in dieser Antwort.
fxReferenceDate
Nur bei den Challenges: Datum der Referenzkurse hinter jeder usd-Zahl.
licence
Die Lizenz der Daten. Heute null: Es ist noch keine festgelegt.
citation, notice
Wie du uns nennst, und der Hinweis «keine Anlageberatung».

So sieht ein Wert aus

Ein echter Wert aus den Daten von heute (FTMO · FTMO Challenge 2-Step · 10k · listPrice):

{
  "value": {
    "amount": 89,
    "currency": "EUR"
  },
  "sources": [
    {
      "url": "https://ftmo.com/en/",
      "kind": "firm-page",
      "seenOn": "2026-10-29",
      "title": "FTMO home (pricing widget)"
    }
  ],
  "checkedOn": "2026-10-29",
  "certainty": "official"
}

Was die Felder bedeuten

Was die Felder bedeuten
FeldBedeutung
valueDer Wert, in der Form, die die OpenAPI-Beschreibung für das Feld nennt.
sources[].urlDie Seite, auf der wir den Wert gelesen haben. Bei Regeln und Preisen immer eine Seite der Firma selbst.
sources[].kindArt der Seite: firm-page, terms, help-center, faq, pdf, regulator, registry oder press.
sources[].seenOnTag, an dem wir die Seite abgerufen und gelesen haben.
checkedOnTag, an dem wir den Wert zuletzt an seiner Quelle bestätigt haben.
certaintyofficial: Seite, AGB, Hilfe-Center oder PDF der Firma. official-extract: Text der Firma, aber nur als Auszug. third-party: Presse oder Behörde, nie für Regelwerte. open: mit Vorbehalt, nie für Filter oder Sortierung.
noteEinschränkung oder Rechenbasis, auf Deutsch und Englisch.
derivedNur in Challenge-Zeilen: aus mehreren Angaben berechnet (Puffer, Einstiegskosten, Kosten je 1.000 Puffer, Ziel ÷ Puffer). Die Quellen sind die der verwendeten Angaben.
ruleVersions[].statuscurrent: Regeln für einen Kauf heute. upcoming: angekündigt, Start nach heute. previous: gilt nicht mehr für Neukäufe, kann aber für schon gekaufte Konten weiter gelten.
validFrom, observedFrom, validUntilStart laut Firma, Tag unserer ersten Beobachtung, letzter Tag für Neukäufe.
appliesTo, grandfatheringFür wen eine Regelversion gilt (nur Neukäufe, alle Konten, …) und was mit vorher gekauften Konten passiert.
affiliateOb wir mit der Firma einen Partnervertrag haben. Er ändert weder Reihenfolge noch Inhalt.
verifiedfalse, oder das Datum, an dem ein Mensch den ganzen Datensatz gegen die Quellen geprüft hat.

Unbekannt ist nicht 0

Fehlt ein Wert, fehlt das Feld. Wir schreiben nie 0, null oder einen leeren Text an seine Stelle. Im Firmendatensatz steht der Grund unter open, in einer Challenge-Zeile unter gaps – dort auch, wenn eine Regel für ein Programm gar nicht gilt (not-applicable, etwa kein Gewinnziel bei einem Instant-Konto).

Ein echter Eintrag aus gaps:

{
  "field": "activationFee",
  "state": "unknown",
  "reason": {
    "de": "Nicht erfasst: Für diesen Wert liegt uns keine belegte Angabe der Firma vor.",
    "en": "Not recorded: we hold no sourced statement from the firm for this value."
  }
}

Beispiele

Mit curl und jq auf der Kommandozeile, oder mit fetch im Browser:

Alle Firmen mit Status und Datenstand
curl -s https://propcrab.io/api/v1/firms \
  | jq '.data[] | {slug, state: .status.value.state, dataAsOf}'
Programme einer Firma mit der aktuellen Regelversion
curl -s https://propcrab.io/api/v1/firms/ftmo \
  | jq '.data.programs[] | {id, name, current: .currentRuleVersionId}'
Listenpreise mit Quelle und Datum
curl -s https://propcrab.io/api/v1/challenges \
  | jq '.data[] | select(.listPrice)
        | {id, price: .listPrice.value, source: .listPrice.sources[0].url, checkedOn: .listPrice.checkedOn}'
Angekündigte Änderungen
curl -s https://propcrab.io/api/v1/changes \
  | jq '.data[] | select(.upcoming) | {firm: .firm.name, date, kind}'
Im Browser (JavaScript)
const response = await fetch("https://propcrab.io/api/v1/firms");
const { meta, data } = await response.json();
console.log(meta.generatedOn, meta.licence, data.length);

Aktualisierung und Caching

  • Statische Dateien. Sie entstehen beim Build und danach höchstens einmal täglich neu. meta.generatedOn nennt den Tag.
  • Cache-Control: public, max-age=3600, s-maxage=86400. Frag eine Adresse bitte höchstens einmal pro Stunde ab; die Daten ändern sich höchstens einmal am Tag.
  • /api/v1/challenges ist die grösste Datei (heute rund 20.1 MB unkomprimiert). Brauchst du nur eine Firma, nimm /api/v1/firms/{slug}.
  • Nur lesen. GET, HEAD und OPTIONS; alles andere beantwortet der Server mit 405.
  • Versionen. In v1 kommen höchstens Felder dazu. Umbenennen oder Entfernen gäbe es nur unter einem neuen Pfad (/api/v2).

Bitte so zitieren

Nenne «PropCrab (propcrab.io)» mit dem Datenstand und deinem Abrufdatum. Bei einzelnen Werten zusätzlich die Quelle der Firma aus sources – sie ist die eigentliche Primärquelle.

Quelle: PropCrab (propcrab.io), Datenstand 29. Oktober 2026, abgerufen am <dein Abrufdatum>; Primärquelle: https://ftmo.com/en/

Lizenz

Für diese Daten ist noch keine Lizenz festgelegt; die API meldet deshalb licence: null. Sobald der Betreiber eine wählt, steht sie hier und in jeder Antwort. Bis dahin: Frag uns, bevor du die Daten gesammelt weiterveröffentlichst.

Keine Anlageberatung

Die Daten beschreiben kostenpflichtige Bewertungsprogramme, meist auf Simulationskonten. Sie sind keine Empfehlung und keine Anlageberatung. Massgeblich sind immer die Bedingungen der Firma zum Zeitpunkt des Kaufs; simulierte Gewinne und Auszahlungen sind keine realen Handelsergebnisse.