Communitygithub.com

Preisfinder

Geben Sie Ihre Produkt-URL oder eine Beschreibung ein, und das Tool findet 5 globale Wettbewerber, ruft deren tatsächliche Preisseiten ab, extrahiert alle Tarife und Preise und erstellt einen vollständigen Preisintelligenzbericht mit dem vorherrschenden Preismodell, einer Preistabelle, Feature-Gate-Analyse, Wettbewerbspositionierung und einer konkreten Preisstrategie-Empfehlung.

Was ist Preisfinder?

Dieses Skill, 'Preisfinder', ist ein KI-gestütztes Tool zur Wettbewerbs-Preisanalyse. Es ermöglicht Agenten, auf Basis einer Produkt-URL oder -Beschreibung automatisch fünf globale Wettbewerber zu identifizieren, deren Preisseiten abzurufen und strukturierte Preisdaten zu extrahieren. Der Agent erstellt daraus einen umfassenden Bericht mit dem dominanten Preismodell, einer Benchmark-Preistabelle, einer Analyse der Feature-Gates, einer Wettbewerbspositionierung und einer konkreten Preisstrategie-Empfehlung. Das Tool benötigt keine API-Keys und läuft komplett mit kostenlosen Python-Bibliotheken; optionale API-Keys verbessern die Qualität. Es ist für Plattformen wie Claude Code, Cursor und Codex geeignet und befolgt eine strikte Null-Halluzinations-Richtlinie: Jeder Preis und jede Funktion muss von der tatsächlich abgerufenen Seite oder einer Websuche stammen. Der Workflow umfasst Phasen wie Produktanalyse, Wettbewerberfindung, Abruf der Preisseiten und Extraktion der Preisdaten, wobei der Benutzer die Wettbewerber bestätigen muss, bevor die Analyse fortgesetzt wird.

Funktioniert mit✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/pricing-finder

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Preisfinder?

Teilen Sie Ihre Produkt-URL oder -Beschreibung mit. Das Tool findet 5 Wettbewerber, ruft deren tatsächliche Preisseiten ab und erstellt einen vollständigen Preisintelligenzbericht: das dominante Modell in Ihrer Nische, eine Benchmark-Preistabelle, Feature-Gate-Analyse, Positionierungskarte und eine konkrete Preisempfehlung für Ihr Produkt.

Keine API-Keys erforderlich. Läuft komplett mit kostenlosen pip-Abhängigkeiten. Optionale API-Keys verbessern die Qualität.


Null-Halluzinations-Richtlinie: Jeder Preis, jeder Tarifname und jedes Feature-Gate im Output muss auf dem Inhalt der abgerufenen Preisseite oder einem DuckDuckGo-Suchschnipsel basieren. Dies gilt für:

  • Wettbewerbspreise: wörtlich aus dem abgerufenen Seiteninhalt extrahiert
  • "Kontakt für Preisangabe": unverändert übernommen, niemals geschätzt oder durch eine Zahl ersetzt
  • Tarifnamen: exakt von der Seite kopiert, nicht paraphrasiert
  • Funktionslisten: aus dem Seiteninhalt extrahiert, nicht aus Produktwissen abgeleitet
  • Positionierungsbeobachtungen: nur aus den Daten der Benchmark-Tabelle abgeleitet

Häufige Fehler

Der Agent wird versuchen, ...Warum das falsch ist
"Kontakt für Preisangabe" durch einen geschätzten Preis zu ersetzenSchätzen Sie niemals Enterprise-Preise. Notieren Sie es exakt als "Kontakt für Preisangabe".
Trainingswissen für Wettbewerbspreise zu verwendenJeder Preis muss auf abgerufenen Seiteninhalten oder einem Suchschnipsel basieren.
Den Schritt zur Wettbewerberbestätigung zu überspringenZeigen Sie immer die gefundenen Wettbewerber an und warten Sie auf Bestätigung. Falsche Wettbewerber = falsche Benchmarks.
Einen Preis ohne Bezug auf Benchmark-Daten zu empfehlenJede Preisempfehlung muss eine bestimmte Zahl aus der Benchmark-Tabelle zitieren.
Eine Seite als hochwertig zu markieren, wenn der Inhalt < 500 Zeichen beträgt< 500 Zeichen bedeutet, dass die Seite nicht abgerufen wurde -- markieren Sie data_quality als 'low' und verwenden Sie den Suchschnipsel-Fallback.
Em-Dashes in der Ausgabe zu verwendenErsetzen Sie alle Em-Dashes durch Bindestriche.

Referenzdateien vor jedem Durchlauf lesen

cat references/pricing-models.md
cat references/extraction-guide.md
cat references/positioning-guide.md

Schritt 1: Setup-Prüfung

echo "TAVILY_API_KEY:    ${TAVILY_API_KEY:+gesetzt (Suchqualität verbessert)}${TAVILY_API_KEY:-nicht gesetzt, DuckDuckGo wird verwendet (kostenlos)}"
echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+gesetzt (JS-Rendering verbessert)}${FIRECRAWL_API_KEY:-nicht gesetzt, requests+BS4 wird verwendet (kostenlos)}"
echo ""
python3 -c "from ddgs import DDGS; import requests, bs4, html2text; print('Abhängigkeiten OK')" 2>/dev/null \
  || echo "FEHLER: Fehlende Abhängigkeiten. Führen Sie aus: pip install ddgs requests beautifulsoup4 html2text"

Wenn Abhängigkeiten fehlen: Stoppen Sie sofort. Teilen Sie dem Benutzer mit: "Fehlende Python-Abhängigkeiten. Führen Sie diesen Befehl aus, um sie zu installieren: pip install ddgs requests beautifulsoup4 html2text -- alles kostenlos, keine Konten erforderlich. Versuchen Sie es dann erneut."

Wenn nur API-Keys fehlen: Fahren Sie fort. DuckDuckGo und requests+BS4 sind die kostenlosen Standardeinstellungen.

Produkt-Slug ableiten:

PRODUCT_SLUG=$(python3 -c "
from urllib.parse import urlparse
import sys, re
url = 'URL_HERE'
if url.startswith('http'):
    host = urlparse(url).netloc.replace('www.', '')
    print(host.split('.')[0])
else:
    print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-'))
")
echo "Produkt-Slug: $PRODUCT_SLUG"

Schritt 2: Eingabe parsen

Sammeln Sie aus der Konversation:

  • product_url: Die abzurufende URL (erforderlich, es sei denn, der Benutzer fügt direkt eine Beschreibung ein)
  • geography: optional -- US / Europa / Indien / global. Standard: US

Wenn der Benutzer nur eine eingefügte Beschreibung (keine URL) bereitstellt: Überspringen Sie die Schritte 3 und 4. Gehen Sie direkt zu Schritt 4 (Produktanalyse) und verwenden Sie den eingefügten Text als product_content. Setzen Sie page_source auf user_description und notieren Sie dies in data_quality_flags.

Wenn weder URL noch Beschreibung vorhanden sind: Fragen Sie: "Was ist die URL Ihres Produkts oder Startups? Oder fügen Sie eine kurze Beschreibung ein: Was es tut, für wen es ist und was es anders macht."


Schritt 3: Produktseite abrufen

Primär: Firecrawl (wenn FIRECRAWL_API_KEY gesetzt ist)

curl -s -X POST https://api.firecrawl.dev/v1/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('data', {}).get('markdown', '') or d.get('markdown', '')
print(f'Über Firecrawl abgerufen: {len(content)} Zeichen')
open('/tmp/pf-product-raw.md', 'w').write(content)
"

Fallback: requests + BS4 (kostenlos, immer verfügbar)

python3 << 'PYEOF'
import requests, html2text, random

USER_AGENTS = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
]
headers = {"User-Agent": random.choice(USER_AGENTS), "Accept": "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8"}
resp = requests.get("URL_HERE", headers=headers, timeout=20, allow_redirects=True)
converter = html2text.HTML2Text()
converter.ignore_images = True
converter.body_width = 0
content = converter.handle(resp.text)[:8000]
print(f'Über requests+BS4 abgerufen: {len(content)} Zeichen')
open('/tmp/pf-product-raw.md', 'w').write(content)
PYEOF

Kontrollpunkt:

python3 -c "
content = open('/tmp/pf-product-raw.md').read()
if len(content) < 200:
    print('FEHLER: Weniger als 200 Zeichen abgerufen -- die Seite verwendet möglicherweise JS-Rendering')
else:
    print(f'Inhalt OK: {len(content)} Zeichen')
"

Wenn Inhalt < 200 Zeichen: Teilen Sie dem Benutzer mit: "Die Produktseite hat zu wenig Inhalt zurückgegeben -- die Site verwendet möglicherweise JavaScript-Rendering. Bitte fügen Sie eine kurze Beschreibung ein: Was Ihr Produkt tut, für wen es ist und was es von Wettbewerbern unterscheidet."


Schritt 4: Produktanalyse (KI)

Seiteninhalt ausgeben:

python3 -c "
content = open('/tmp/pf-product-raw.md').read()[:5000]
print('=== PRODUKTSEITE (erste 5000 Zeichen) ===')
print(content)
"

KI-Anweisungen: Analysieren Sie die obige Produktseite und extrahieren Sie:

  • product_name: Der Produkt- oder Firmenname
  • one_line_description: Was es tut, für wen, Kernnutzen. Unter 20 Wörtern. Keine Marketingsprache.
  • industry_taxonomy: l1 (Oberkategorie: entwicklertools / fintech / healthtech / consumer / etc.), l2 (Bereich: devops / payments / hr / etc.), l3 (spezifische Nische: CI/CD-automatisierung / embedded-payments / async-video / etc.)
  • differentiators: Exakt 2-3 spezifische Dinge, die dieses Produkt auszeichnen. Diese fließen in die Empfehlung ein -- seien Sie spezifisch. Allgemeine Antworten wie "einfach zu bedienen" sind nicht akzeptabel.
  • icp: buyer_persona (Berufsbezeichnung), company_type, company_size
  • geography_bias: US / Europa / Indien / global
  • page_source: "live_page" oder "user_description"

Schreiben Sie nach /tmp/pf-product-analysis.json:

python3 << 'PYEOF'
import json

analysis = {
    # FÜLLEN aus Ihrer obigen Analyse
    "product_name": "",
    "one_line_description": "",
    "industry_taxonomy": {"l1": "", "l2": "", "l3": ""},
    "differentiators": [],
    "icp": {"buyer_persona": "", "company_type": "", "company_size": ""},
    "geography_bias": "US",
    "page_source": "live_page"
}

json.dump(analysis, open('/tmp/pf-product-analysis.json', 'w'), indent=2)
print('Produktanalyse geschrieben.')
PYEOF

Überprüfen:

python3 -c "
import json
a = json.load(open('/tmp/pf-product-analysis.json'))
print('Produkt:', a['product_name'])
print('Branche:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('Unterscheidungsmerkmale:')
for d in a['differentiators']:
    print(f'  - {d}')
"

Schritt 4b: Phase 1 -- Wettbewerber finden

ls scripts/research.py 2>/dev/null && echo "Skript gefunden" || echo "FEHLER: scripts/research.py nicht gefunden -- kann nicht fortfahren"
python3 scripts/research.py \
  --phase discover \
  --product-analysis /tmp/pf-product-analysis.json \
  --output /tmp/pf-competitors-raw.json

Ergebnisse zur KI-Überprüfung ausgeben:

python3 -c "
import json
data = json.load(open('/tmp/pf-competitors-raw.json'))
print(f'Durchgeführte Suchen: {len(data[\"competitor_searches\"])}')
for s in data['competitor_searches']:
    print(f'\nAbfrage: {s[\"query\"]}')
    for r in s.get('results', [])[:6]:
        print(f'  - {r[\"title\"]} | {r[\"url\"]}')
        print(f'    {r.get(\"snippet\",\"\")[:150]}')
"

KI-Anweisungen: Lesen Sie die obigen Suchergebnisse. Wählen Sie genau 5 Wettbewerber-Unternehmen aus, die:

  1. In den Suchtiteln oder -schnipseln genannt werden
  2. In derselben L3-Nische wie das zu analysierende Produkt sind
  3. Tatsächliche Softwareprodukte sind (keine Agenturen, List-Artikel oder Bewertungsseiten)
  4. Sich voneinander unterscheiden

Schreiben Sie für jeden Wettbewerber: name, url, pricing_url (Preisseite -- falls nicht in den Schnipseln gefunden, als [url]/pricing ableiten), description (ein Satz aus dem Schnipsel), source_url.


Schritt 5: Wettbewerberbestätigung

python3 << 'PYEOF'
import json

analysis = json.load(open('/tmp/pf-product-analysis.json'))

# FÜLLEN: 5 Wettbewerber aus den obigen Suchergebnissen
candidates = [
    # {"name": str, "url": str, "pricing_url": str, "description": str, "source_url": str}
]

print(f"\nGefundene 5 Wettbewerber für {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n")
for i, c in enumerate(candidates, 1):
    print(f"  {i}. {c['name']} -- {c['description']}")
    print(f"     Produkt: {c['url']}")
    print(f"     Preise: {c['pricing_url']}")

data = json.load(open('/tmp/pf-competitors-raw.json'))
data['competitor_candidates'] = candidates
json.dump(data, open('/tmp/pf-competitors-raw.json', 'w'), indent=2)
PYEOF

Teilen Sie dem Benutzer mit: "Dies sind die 5 Wettbewerber, von denen ich Preisdaten abrufen werde. Fügen Sie welche hinzu, entfernen Sie welche oder tauschen Sie sie aus -- oder sagen Sie 'sieht gut aus', um fortzufahren."

Auf Bestätigung warten. Wenn der Benutzer die Liste bearbeitet, aktualisieren Sie die Kandidaten entsprechend. Schreiben Sie dann die bestätigte Liste:

python3 << 'PYEOF'
import json

# FÜLLEN: bestätigte Wettbewerberliste (nach Benutzerüberprüfung)
confirmed = [
    # {"name": str, "url": str, "pricing_url": str}
]

json.dump({"confirmed_competitors": confirmed}, open('/tmp/pf-competitors-confirmed.json', 'w'), indent=2)
print(f"Bestätigte {len(confirmed)} Wettbewerber für die Preisrecherche.")
for c in confirmed:
    print(f"  - {c['name']} | Preise: {c['pricing_url']}")
PYEOF

Schritt 6: Phase 2 -- Preisseiten abrufen

python3 scripts/research.py \
  --phase fetch-pricing \
  --competitors /tmp/pf-competitors-confirmed.json \
  --output /tmp/pf-pricing-raw.json

Dies ruft die Preisseite jedes Wettbewerbers mit einem 3-stufigen Fallback ab:

  1. Direkter Abruf: requests + beautifulsoup4 + html2text
  2. Google-Cache: webcache.googleusercontent.com/search?q=cache:[url]
  3. DuckDuckGo-Suche: "[Wettbewerber]" preise tarife kosten pro monat (Schnipsel-Fallback)

Abrufzusammenfassung ausgeben:

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
print(f'Abgerufene Wettbewerber: {data[\"competitors_fetched\"]}')
print()
for r in data['results']:
    quality_label = {'high': 'GUT', 'medium': 'OK', 'low': 'NUR SCHNIPSEL'}.get(r['data_quality'], r['data_quality'])
    print(f'  {r[\"name\"]:20} {r[\"source\"]:15} {r[\"content_length\"]:5} Zeichen  [{quality_label}]')
"

Wenn ein Wettbewerber data_quality: low hat: Dies bedeutet, dass die Preisseite blockiert oder JS-gerendert wurde. Die Analyse wird mit den Suchschnipseln fortgesetzt, aber das Vertrauen für diesen Wettbewerber wird als niedrig vermerkt.


Schritt 7: Preisextraktion (KI)

Alle rohen Preisinhalte ausgeben:

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
for r in data['results']:
    print(f'\n=== {r[\"name\"]} (Quelle: {r[\"source\"]}, Qualität: {r[\"data_quality\"]}) ===')
    print(f'Preis-URL: {r[\"pricing_url\"]}')
    print(r['content'][:4000])
    print('---')
"

KI-Anweisungen: Extrahieren Sie für jeden Wettbewerber strukturierte Preisdaten aus dem obigen Inhalt. Befolgen Sie references/extraction-guide.md zur Identifizierung von Tarifen, Preisen, Limits und CTAs.

Null-Halluzinations-Regeln:

  1. Preise nur wörtlich aus dem Inhalt extrahieren. Wenn ein Preis nicht im Inhalt ist, schreiben Sie null.
  2. "Kontakt für Preisangabe" exakt so notieren. Niemals durch eine geschätzte Zahl ersetzen.
  3. data_quality: low bedeutet, dass die Daten aus Suchschnipseln stammen - extrahieren Sie, was da ist, aber füllen Sie keine Lücken mit Trainingswissen.
  4. Für jedes nicht im Inhalt vorhandene Feld: schreiben Sie "nicht in den Seitendaten gefunden".
  5. Jährliche Preise: immer den monatlichen Äquivalentwert zusammen mit der Jahressumme notieren.

Schreiben Sie nach /tmp/pf-pricing-extracted.json:

python3 << 'PYEOF'
import json

# FÜLLEN: ein Objekt pro Wettbewerber, folgt dem Schema unten
extracted = [
    # {
    #   "competitor": str,
    #   "pricing_url": str,
    #   "data_quality": "high" | "medium" | "low",
    #   "pricing_model": "per-seat" | "flat-rate" | "usage-based" | "freemium" | "tiered-flat" | "hybrid",
    #   "billing_cadence": ["monatlich"] | ["jährlich"] | ["monatlich", "jährlich"],
    #   "annual_discount": str,           # z.B. "20%" oder "nicht in den Seitendaten gefunden"
    #   "free_tier": true | false,
    #   "free_trial": true | false,
    #   "free_trial_days": int | null,
    #   "tiers": [
    #     {
    #       "name": str,
    #       "price_monthly": float | null,       # null bei "Kontakt für Preisangabe"
    #       "price_annual_monthly": float | null, # monatlicher Äquivalentwert bei jährlicher Abrechnung
    #       "price_note": str,                   # "Kontakt für Preisangabe", "Kostenlos" oder leer
    #       "seats": str,                        # "pro Sitzplatz", "unbegrenzt", "bis zu 5", etc.
    #       "key_limits": [str],                 # Speicher, API-Aufrufe, Projekte, etc.
    #       "key_features": [str]                # Top 3-5 Funktionen in diesem Tarif
    #     }
    #   ],
    #   "enterprise_tier": true | false,
    #   "enterprise_pricing": str,               # "Kontakt für Preisangabe" oder tatsächlicher Preis
    #   "regional_pricing": str | null           # z.B. "Indien: ₹999/Monat" oder null
    # }
]

json.dump(extracted, open('/tmp/pf-pricing-extracted.json', 'w'), indent=2, ensure_ascii=False)
print(f'{len(extracted)} Wettbewerber extrahiert.')
PYEOF

Überprüfen:

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-extracted.json'))
for c in data:
    tiers = [t['name'] for t in c['tiers']]
    print(f\"  {c['competitor']:20} | Modell: {c['pricing_model']:15} | Tarife: {', '.join(tiers)}\")
"

Wichtig: Wenn das Tool sich weigert, einen Preis für einen bestimmten Tarif zu extrahieren, überprüfen Sie den Inhalt in Schritt 7 noch einmal. Jeder Preis muss sich auf eine Zahl im abgerufenen Inhalt zurückführen lassen.


Schritt 8: Benchmark-Analyse (KI)

Lesen Sie die Referenz: references/pricing-models.md

cat references/pricing-models.md

KI-Anweisungen: Identifizieren Sie aus den extrahierten Daten der Wettbewerber das dominante Preismodell:

  • Wenn die Mehrheit der Wettbewerber pro Sitzplatz abrechnet: Modell = per-seat
  • Wenn die Mehrheit Flatrate-Tarife hat: Modell = flat-rate
  • Wenn die Mehrheit verbrauchsbasierte Preise hat: Modell = usage-based
  • Wenn 2+ Modelle üblich sind: Modell = hybrid

Erstellen Sie eine Vergleichstabelle mit dem niedrigsten, höchsten und medianen Monatspreis für jeden Tariftyp.

Schreiben Sie nach /tmp/pf-benchmark-analysis.json:

python3 << 'PYEOF'
import json

benchmark = {
    "dominant_pricing_model": "",  # eines aus: per-seat / flat-rate / usage-based / freemium / tiered-flat / hybrid
    "model_confidence": "",       # "high" / "medium" / "low"
    "model_rationale": "",        # 2-3 Sätze, die erklären, warum dieses Modell als dominant identifiziert wurde
    "benchmark_table": [
        # {
        #   "tier": "Entry-Level",     # kann "Free", "Starter", "Basic", "Professional", "Enterprise" oder ein anderer Name sein
        #   "price_min": 0.0,
        #   "price_max": 99.0,
        #   "price_median": 29.0,
        #   "num_competitors_with_tier": 4,
        #   "typical_features": [str],
        #   "typical_limits": [str]
        # }
    ],
    "feature_gates": {
        "common_free_features": [str],
        "paid_gates": [str],          # Funktionen, die häufig in kostenpflichtigen Tarifen gesperrt sind
        "premium_gates": [str]       # Funktionen, die nur in den höchsten Tarifen verfügbar sind
    },
    "annual_discount_benchmark": "", # z.B. "Typischerweise 20% Rabatt bei jährlicher Abrechnung"
    "enterprise_pricing_pattern": "" # z.B. "Alle Wettbewerber nutzen 'Kontakt für Preisangabe' für Enterprise"
}

json.dump(benchmark, open('/tmp/pf-benchmark-analysis.json', 'w'), indent=2)
PYEOF

Schritt 9: Positionierungsbericht und Empfehlung (KI)

Referenz lesen: references/positioning-guide.md

cat references/positioning-guide.md

KI-Anweisungen: Basierend auf der Produktanalyse und der Benchmark-Tabelle:

  1. Wettbewerbspositionierungskarte: Zeichnen Sie eine 2x2-Matrix (Preis vs. Funktionsumfang) unter Verwendung der Benchmark-Daten. Positionieren Sie das Produkt relativ zu den Wettbewerbern.

  2. Bereich für Preisextraktion:

    • Empfohlener Preisbereich unter Bezugnahme auf die Benchmark-Tabelle
    • Begründen Sie dies mit spezifischen Zahlen aus pf-pricing-extracted.json
  3. Tarifstruktur-Empfehlung:

    • Wie viele Tarife? (typischerweise 3-4)
    • Welche Funktionen in jedem Tarif? (basierend auf Feature-Gate-Analyse)
    • Preisstrategie: penetration / skimming / value-based / competitive-matching / freemium
  4. Strategie-Hinweise:

    • Risiken des empfohlenen Ansatzes
    • Was das dominante Preismodell für die Preisstrategie bedeutet
    • Ob regionalisierte Preise sinnvoll sind (basierend auf geography_bias und regionalen Preisdaten)

Schreiben Sie den endgültigen Bericht:

python3 << 'PYEOF'
import json

# Alle zuvor geschriebenen Dateien laden
product = json.load(open('/tmp/pf-product-analysis.json'))
extracted = json.load(open('/tmp/pf-pricing-extracted.json'))
benchmark = json.load(open('/tmp/pf-benchmark-analysis.json'))

# Erstellen Sie den Preisintelligenzbericht als Dict für die Ausgabe
report = {
    "product": product['product_name'],
    "report_type": "pricing_intelligence",
    "executive_summary": {
        "dominant_pricing_model_in_space": benchmark['dominant_pricing_model'],
        "our_recommended_strategy": "",   # 1 Satz: die empfohlene Preisstrategie
        "recommended_price_range": ""      # z.B. "19€ - 79€/Monat basierend auf Median-Preisen"
    },
    "competitive_positioning_map": {
        "axes": {"x": "Preis (niedrig -> hoch)", "y": "Funktionsumfang (grundlegend -> umfassend)"},
        "products": [
            # FÜLLEN: Position jedes Wettbewerbers + Ihr Produkt
            # {"name": str, "position": {"price": int|float, "features": int|float}, "note": str}
        ],
        "insights": [str]  # 2-3 Schlüsselerkenntnisse aus der Karte
    },
    "pricing_recommendation": {
        "rationale": "",  # Absatz: Warum diese Preisstrategie für dieses Produkt in dieser Nische geeignet ist
        "recommended_tiers": [
            # {
            #   "name": str,
            #   "target_price": float,
            #   "price_rationale": str,  # Zitieren Sie einen bestimmten Wettbewerbspreis als Referenz
            #   "must_have_features": [str],
            #   "nice_to_have_features": [str],
            #   "positioning_note": str
            # }
        ],
        "go_to_market_pricing_notes": [str],  # 2-4 umsetzbare Notizen
        "risks": [str]  # 1-2 Risiken dieses Ansatzes
    },
    "limitations_and_footnotes": {
        "data_quality_notes": [],  # Alle Low-Qualität-Preisdaten notieren
        "methodology": "Alle Preise wurden von öffentlich zugänglichen Preisseiten extrahiert. 'Kontakt für Preisangabe' ist nicht enthalten. Die Preise können sich ändern."
    }
}

# Vollständigen Bericht ausgeben
print(json.dumps(report, indent=2, ensure_ascii=False))
print()
print("---")
print(f"Bericht für {product['product_name']} abgeschlossen.")
print("Speichern Sie diesen Bericht, um ihn dem Benutzer zu präsentieren.")
PYEOF

Schritt 10: Bericht präsentieren

Präsentieren Sie dem Benutzer den Bericht aus Schritt 9. Sie können die wichtigsten Erkenntnisse zusammenfassen:

  • Dominantes Preismodell: [Modell aus der Benchmark-Analyse]
  • Empfohlene Preisstrategie: [Strategie]
  • Preisspanne: [Spanne]
  • 3 wichtigste Erkenntnisse:
    1. ...
    2. ...
    3. ...
  • Nächste Schritte: [umsetzbare nächste Schritte zur Validierung der Preisstrategie]

Wichtig: Alle empfohlenen Preise müssen mit einer Fußnote versehen sein, die auf einen bestimmten Wettbewerber und Tarif verweist. Zum Beispiel: "Empfohlener Einstiegspreis: 29€/Monat (basierend auf dem Median der Starter-Tarife der Wettbewerber)."

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

Verwandte Skills