Zum Inhalt springen
NeuSo funktioniert es

RevOps-Playbook: Outbound mit API-Schlüsseln, der CLI & CSV automatisieren

Erzeugen Sie eingeschränkte API-Schlüssel, importieren und synchronisieren Sie Kontakte programmatisch, steuern Sie Kampagnen von der CLI aus, binden Sie es in CI/CD ein, und überwachen Sie Schlüsselnutzung und Guthaben-Reichweite — über die REST-API und CSV, die heute verfügbare Oberfläche.

  1. Die automatisierbare Oberfläche abstecken (und was noch nicht geht)

    Was heute live ist: die REST API, die CLI und CSV/JSON-Kontaktimport/-export. Was nicht: Webhooks, CRM-Connectoren (Salesforce, HubSpot, Zoho, Pipedrive) und Slack/Teams/Sheets/Airtable/Notion-Connectoren sind allesamt coming-soon und liefern unsupported_operation, wenn Sie versuchen, sie aufzurufen. Bauen Sie Automatisierung auf der verfügbaren Oberfläche auf: pollen und exportieren Sie über REST/CSV, statt auf einen Connector zu warten.

  2. Einen Least-Privilege-API-Schlüssel erstellen

    Gehen Sie zu Settings → API und erstellen Sie einen benannten Schlüssel pro Konsument: z. B. ci-contact-sync: mit nur den Scopes, die er benötigt (contacts:read/write, campaigns:read usw.). Der Schlüssel wird einmalig angezeigt; kopieren Sie ihn direkt in einen Secret-Manager. Widerrufen Sie ihn sofort, falls er jemals durchsickert: der Widerruf wirkt unmittelbar. Siehe Create & Manage Developer API Keys.

    Einen Least-Privilege-API-Schlüssel erstellen
  3. Die CLI installieren und verifizieren

    Installieren Sie die CLI und bestätigen Sie, dass der Schlüssel aufgelöst wird, bevor Sie etwas anderes tun:

    npm install -g @firstsales.io/cli
    export FIRSTSALES_API_KEY="fs_live_..."   # from your secret manager
    firstsales whoami --json
    firstsales doctor
  4. Kontakte programmatisch aus CSV importieren

    Übertragen Sie einen Batch über einen Importjob mit einem Idempotenz-Schlüssel: die Plattform dedupliziert serverseitig nach E-Mail, sodass ein erneuter Lauf derselben Datei niemanden dupliziert:

    firstsales contact-imports create --org "$ORG_ID" --workspace "$WS_ID" \
      --data-file ./leads.csv \
      --idempotency-key "leads-import-2026-07"
  5. Kontakte synchron halten: die goldene Schleife

    Automatisierung folgt derselben Schleife wie ein menschlicher Bediener: prüfen, dann gezielt ändern, dann verifizieren. Mit --dry-run vor jedem Schreibvorgang vorschauen, mit einem Idempotenz-Schlüssel ändern, dann erneut lesen, um zu bestätigen:

    firstsales contacts list --org "$ORG_ID" --workspace "$WS_ID" --json
    firstsales contacts update --org "$ORG_ID" --workspace "$WS_ID" \
      --contact "$CONTACT_ID" --data '{"job_title":"VP Sales"}' --dry-run
    firstsales contacts update --org "$ORG_ID" --workspace "$WS_ID" \
      --contact "$CONTACT_ID" --data '{"job_title":"VP Sales"}'
    firstsales contacts get --org "$ORG_ID" --workspace "$WS_ID" --contact "$CONTACT_ID"
  6. Kampagnen über die CLI oder API steuern

    Listen und lesen Sie Kampagnen über die CLI, oder rufen Sie /api/v1 direkt mit einem Bearer-Token auf, wenn Sie nicht über die CLI gehen möchten:

    firstsales campaigns list --org "$ORG_ID" --workspace "$WS_ID" --json
    
    curl https://api.app.firstsales.io/api/v1/organizations/$ORG_ID/workspaces/$WS_ID/campaigns/$CAMPAIGN_ID/analytics \
      -H "Authorization: Bearer $FIRSTSALES_API_KEY"
  7. In CI/CD einbinden

    Injizieren Sie den Schlüssel aus dem Secret-Store Ihres CI-Anbieters, hardcoden Sie ihn nie. Starten Sie jeden Job mit whoami, damit ein fehlerhafter Schlüssel schnell scheitert, und sichern Sie echte Schreibvorgänge hinter --dry-run bei PRs gegenüber echten Änderungen auf main ab, mit Idempotenz-Schlüsseln, die aus einer stabilen CI-Variable abgeleitet sind, damit ein wiederholter Pipeline-Schritt ein No-op ist:

    # GitHub Actions
    - name: FirstSales sync
      env:
        FIRSTSALES_API_KEY: ${{ secrets.FIRSTSALES_API_KEY }}
      run: |
        firstsales whoami --json > /dev/null || { echo "auth failed"; exit 1; }
        firstsales contact-imports create --org "$ORG_ID" --workspace "$WS_ID" \
          --data-file ./leads.csv --idempotency-key "import-${GITHUB_SHA}"
  8. Nutzung und Credit-Reichweite überwachen

    Behalten Sie die API-Schlüssel-Nutzung/Logs unter Settings → API und den Credit-Saldo der Organisation unter Billing im Blick, damit eine automatisierte Pipeline die Organisation nie unbemerkt leerlaufen lässt. Siehe Credits, Plans & Billing und Read Campaign Analytics.

Profi-Tipps

  • Ein gescopter Schlüssel pro Konsument

    CI, Ihr Laptop und jede Integration erhalten jeweils einen eigenen benannten Schlüssel: sickert einer durch oder wird ausgemustert, widerrufen Sie nur diesen, nicht alles.

  • Idempotenz-Schlüssel sind kostenlose Absicherung

    Jeder automatisierte create trägt --idempotency-key, damit ein wiederholter Pipeline-Schritt ein No-op ist, kein doppelter Datensatz.

  • Nicht gegen coming-soon-Connectoren entwickeln

    Webhook-, CRM-, Slack- und Sheets-Connectoren liefern heute unsupported_operation: stattdessen über REST + CSV pollen oder exportieren, statt auf sie zu warten.

  • Prüfen, dry-run, ändern, verifizieren: auch in Skripten

    Dieselbe Schleife, die einen menschlichen Bediener schützt, schützt auch einen Agenten. Immer --dry-run vor jedem Schreibvorgang in der Automatisierung, nicht nur interaktiv.

Häufig gestellte Fragen

Was kann ich heute tatsächlich automatisieren?

Die REST API, die CLI und CSV/JSON-Kontaktimport/-export, allesamt authentifiziert mit gescopten Developer-API-Schlüsseln.

Gibt es Webhooks, CRM- oder Slack-Integrationen?

Noch nicht: Webhooks, CRM-Connectoren (Salesforce, HubSpot, Zoho, Pipedrive) und Slack/Teams/Sheets/Airtable/Notion-Connectoren sind coming-soon und liefern unsupported_operation. Bauen Sie keine Automatisierung, die von ihnen abhängt.

Wie importiere ich Kontakte programmatisch?

contact-imports create --data-file mit einer CSV- oder JSON-Datei. Kontakte werden serverseitig nach E-Mail dedupliziert, sodass ein erneuter Lauf desselben Imports sicher ist.

Wie funktioniert die Authentifizierung für CI?

Speichern Sie den Developer-API-Schlüssel im Secret-Store Ihres CI-Anbieters und stellen Sie ihn als FIRSTSALES_API_KEY bereit. Für rohes HTTP senden Sie ihn als Bearer-Token.

Wie vermeide ich doppelte Schreibvorgänge in einer Pipeline?

Übergeben Sie --idempotency-key (oder den Header Idempotency-Key bei rohem HTTP), abgeleitet von einem stabilen Wert wie einem Commit-SHA: ein wiederholter Schritt wird zum No-op statt zum Duplikat.

Wie verhindere ich, dass ein Löschen in CI Daten vernichtet?

Destruktive CLI-Befehle erfordern --confirm: lassen Sie ihn aus jedem Schritt heraus, der nicht löschen sollte, damit ein Cleanup-Job nur bei explizit gesetztem Flag Daten entfernen kann.

Wie behalte ich Nutzung und Credit-Reichweite im Blick?

Prüfen Sie die API-Schlüssel-Nutzung/Logs unter Settings → API und den Credit-Saldo der Organisation unter Billing, damit eine automatisierte Pipeline Ihnen nicht unbemerkt die Credits ausgehen lässt.

CLI oder rohe API?

Die CLI ist ein dünner Wrapper über dieselbe öffentliche /api/v1-Oberfläche. Beides funktioniert: die CLI bietet praktisches Auth-Handling, Idempotenz und JSON-Ausgabe für Skripte und Agenten.

Erste Schritte

Akquise, die weiterläuft, wenn du offline bist.Leads, E-Mails, Follow-ups und Antworten, erledigt.

Verbinde unbegrenzte Postfächer und lass KI-Agenten Leads finden, jede E-Mail schreiben und nachfassen. Oder sende deine eigenen Vorlagen im manuellen Modus. Ab $29/Monat.

$1 für 3 Tage · Jederzeit kündbar · Kein Vertrag

Mit KI installieren

Dein Coding-Agent richtet die FirstSales CLI und Skills für dich ein.

Prompt für Claude Code

I'm setting up FirstSales (https://firstsales.io), an AI outbound sales platform: campaigns, contacts, a reply inbox, deliverability and lead signals. Help me get my workspace sending real, good emails end to end, from Claude Code.

Read these first so you know how FirstSales works:
- Developer docs and API: https://developer.firstsales.io
- CLI: https://www.npmjs.com/package/@firstsales.io/cli
- Skills for coding agents: https://github.com/firstsalesio/firstsales-skills (read README.md and GUIDE.md)

Setup
1. Install the CLI: npm install -g @firstsales.io/cli
2. Install the FirstSales skills:
   claude plugin marketplace add firstsalesio/firstsales-skills
   claude plugin install firstsales@firstsales
3. Ask me if I already have a FirstSales account. If not, send me to https://app.firstsales.io to sign up.
4. Ask me to create an API key under Settings → API → API Keys, with only the scopes we need.
   Never ask me to paste the key into this chat. Tell me to run this in my own terminal, so the key stays hidden:
   read -rs FS_KEY && firstsales auth login --api-key "$FS_KEY"; unset FS_KEY
5. Run `firstsales whoami` and tell me which workspace and organisation we are connected to.

Then ask me about my business: what I sell, who I sell to (roles, company size, countries), my best customers, and what I use today for outbound (tools, lists, mailboxes). Walk me through:
1. Teaching FirstSales my business: website, offer, proof points and case studies in the knowledge base, so the AI writes like someone who knows the product.
2. Connecting my sending mailboxes and checking my sending domain: SPF, DKIM, DMARC and warm-up. If anything is unhealthy, tell me the exact DNS record to add.
3. Bringing in contacts: import my CSV or CRM export into a clean list, remove duplicates and bad emails, and block domains I must never email (customers, competitors, my own).
4. Building my first campaign: the right list, senders, steps and timing. Write the sequence with me, show me the drafts, and do not launch until I say yes.
5. Setting up Signals if it fits: find people engaging with LinkedIn posts about topics my buyers care about, and turn them into leads.
6. Inviting my team and giving each person the right access.

Once campaigns run, show me how to work the reply inbox from here: which replies need an answer, draft responses in my voice, and move good conversations into deals. If I use Cal.com, connect it so follow-ups can offer my booking link (not the first email).

Throughout, as you learn about my business, proactively suggest and help create:
- Reply templates for the questions and objections my prospects are likely to raise, based on my product, site and codebase if you can see them.
- Campaign ideas and segments worth testing, with the reason for each.

Safety rules:
- Show every change as a dry run (--dry-run) first and wait for my yes. Never send emails, launch campaigns or delete anything without my yes.
- Tell me before anything that spends credits, and how many.

Be opinionated. If the docs give a sensible default, just use it. Don't make me choose between five options.