agentsclimarketplace

European alternatives api

Skill Yesterday-AI/ytstack/skills/european-alternatives-api

An opinionated OS for AI coding agents. Plan like a PM, execute like a senior eng. -- Claude Code plugin

Install
npx -y skills add Yesterday-AI/ytstack --skill european-alternatives-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when picking software for EU customers, GDPR-driven replacements, digital-sovereignty contexts, or when user asks for the European / open-source version of a US product (Google Drive, Dropbox, Slack, …). Biases tech choices toward the 289 community-curated alternatives at european-alternatives.cloud. Fetches live data. Complements deutschland-stack-api (community-curated vs. government-graduated).

SKILL.md

4.9 KB, as published. Nobody here has run it

European Alternatives

Community-kuratierter Katalog unter https://european-alternatives.cloud/en. 289 Einträge über 46 Kategorien, überwiegend DE/CH/FR/NL. Quelle: https://github.com/TheMorpheus407/european-alternatives.

Kernprinzip: Wenn für ein US-Produkt eine europäische oder Open-Source-Alternative gesucht wird, zuerst hier nachschlagen. Für Behörden-/Vergabe-Kontexte hat deutschland-stack-api Vorrang; EA ergänzt um Breite und Aktualität.

Wann anwenden

  • User fragt nach einer EU-/OSS-Alternative zu einem konkreten US-Produkt
  • Tech-Stack-Pick mit GDPR- oder EU-Data-Residency-Anforderung
  • Cross-Check des Deutschland-Stack mit Community-View (DS = staatlich graduated; EA = community, breiter, weniger streng)
  • Audits der Form "was ersetzt X, und wer ersetzt es noch"

Nicht anwenden für reines Web-Scraping der Seite -- die API liefert dieselben Daten strukturiert.

Endpoints

Base: https://european-alternatives.cloud/api/catalog

EndpointGrößeInhalt
/categories~9 KB46 Kategorien mit usGiants und alternativeCount
/entries?status=alternative~1.9 MB289 Alternativen (full database)
/entries?status=us~700 KB109 US-Originale, die ersetzt werden
/entries?status=denied~50 KB18 abgelehnte Einträge mit Begründung
/landing-groups~1 KBKategorie-Cluster (privacy-security, communication-work, …)
/further-reading~1 KBWeitere Verzeichnisse (european-alternatives.eu, Privacy Guides, PRISM Break)

Alle liefern {"data": [...]}. Keine Pagination, keine Auth. Für wiederholte Lookups in einer Session einmal cachen (-o /tmp/ea-alts.json).

Eintrags-Schema (Alternativen)

id, name, description, website, logo, country (ISO-2 / "oss"),
category, replacesUS[], isOpenSource, pricing (free|freemium|paid),
tags[], openSourceLevel, openSourceAuditUrl, sourceCodeUrl,
headquartersCity, license, dateAdded, localizedDescriptions{},
reservations[], positiveSignals[], trustScore (0-100),
trustScoreStatus, trustScoreBreakdown{}

US-Einträge lassen OSS-Felder weg; denied-Einträge haben zusätzlich deniedDecision.

Lookup-Patterns

BASE="https://european-alternatives.cloud/api/catalog"

# 1. List all categories with counts
curl -s "$BASE/categories" | jq -r '.data[] | "\(.alternativeCount)\t\(.name)\t\(.usGiants | join(", "))"'

# 2. Find what replaces a specific US product (by id, e.g. "google-drive")
curl -s "$BASE/entries?status=alternative" \
  | jq '.data[] | select(.replacesUS | index("google-drive")) | {name, country, website, isOpenSource, trustScore}'

# 3. All alternatives in a category (e.g. "email")
curl -s "$BASE/entries?status=alternative" \
  | jq '.data[] | select(.category=="email") | {name, country, pricing, trustScore}'

# 4. Open-source only, filtered by country
curl -s "$BASE/entries?status=alternative" \
  | jq '.data[] | select(.isOpenSource==true and .country=="de") | .name'

# 5. Cache the full alternatives JSON locally (re-fetch occasionally -- community catalog grows)
curl -s "$BASE/entries?status=alternative" -o /tmp/ea-alts.json

For richer filtering (multi-field, sort by trustScore, joins with categories), use Python:

import json, urllib.request
B = "https://european-alternatives.cloud/api/catalog"
alts = json.load(urllib.request.urlopen(f"{B}/entries?status=alternative"))["data"]
cats = {c["id"]: c for c in json.load(urllib.request.urlopen(f"{B}/categories"))["data"]}

# Top-trust EU-hosted LLM alternatives
llm = [a for a in alts if a["category"] == "large-language-models" and a["country"] != "us"]
for a in sorted(llm, key=lambda x: -(x.get("trustScore") or 0))[:5]:
    print(f"{a['trustScore']:>3}  {a['name']:<25} ({a['country']}) -- {a['website']}")

Siehe auch

  • deutschland-stack-api -- Staatlich graduated/auditiert, enger Scope, Vergabe-relevant. Bei ÖR-Kontext hat DS Vorrang; EA ergänzt um Breite und Aktualität.

Caveats

  • API ist undokumentiert (aus JS-Bundle extrahiert). Kein SLA, kein Versions-Pinning.
  • country nutzt ISO-2 plus den Literal "oss" für vendor-neutrale OSS-Projekte.
  • trustScore ist Community-abgeleitet -- trustScoreBreakdown lesen, bevor er zitiert wird.
  • Für Sessions mit vielen Filter-Queries die Alternativen-JSON einmal cachen -- 1.9 MB pro Call summiert sich.
  • Community-Katalog wächst -- gelegentlich neu fetchen.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.