Step 1 — Gather context
If references/learnings.md exists, read it first for accumulated platform knowledge.
-
What are you trying to do?
- A) Launch a Phantom via the API and fetch its scraped output (agent → container → result)
- B) Get notified when a run finishes (per-agent webhook)
- C) Pick/configure a Phantom (LinkedIn search export, profile scraper, auto-connect, email finder)
- D) Chain Phantoms into a Flow/Workflow, or add an AI Agent step
- E) Manage slots + execution-time limits, or the LinkedIn Leads storage
- F) Handle LinkedIn session cookies / avoid getting an account flagged
-
API or no-code? Code → REST API (
X-Phantombuster-Key-1) + webhooks. No endpoint → run Phantoms in-app, or Zapier/Make/n8n.
Skip-ahead rule: if the user's prompt already provides enough context, skip to Step 2.
Step 2 — Route or answer directly
| If the question is about... | Route to... |
|---|---|
| Prospect-list / lead-sourcing strategy across tools (which scraper, ICP) | /sales-prospect-list {question} |
| Contact enrichment strategy across vendors | /sales-enrich {question} |
| Outbound sequence/cadence for the leads you scrape | /sales-cadence {question} |
| LinkedIn outreach strategy / account safety across tools | /sales-cadence {question} |
When routing, give the exact command, e.g. "This is a strategy question — run: /sales-prospect-list build a LinkedIn ICP list safely".
Step 3 — PhantomBuster platform reference
Read references/platform-guide.md for the full reference — the Phantom/Flow/Agent model, the slots + execution-time + email-credits limits, the LinkedIn-cookie + safety model, plan tiers, and quick-start recipes (launch a Phantom; fetch results; wire a webhook).
Read references/phantombuster-api-reference.md for the integration surface — base https://phantombuster.com/api/v2, X-Phantombuster-Key-1 auth, the Agents (/agents/fetch-all, /agent/{id}/launch, /agent/{id}/fetch-output), Containers (/containers/fetch, /containers/fetch-result-object), and Storage (LinkedIn Leads DB) endpoints, JSend responses, the Agent-ID vs Container-ID model, and per-agent webhooks (secret query param, 11s timeout).
Answer using only the relevant section. Don't dump the full reference.
Step 4 — Actionable guidance
Focus on the user's specific situation:
- Agent → container → result.
POST /agent/{id}/launchqueues a run and returns a container id; the scraped data isn't ready until that container finishes. Pick theoutputparam deliberately, then read/containers/fetch-result-object?id=…for the structured leads. - Use a webhook, not tight polling. Set the per-agent webhook (Advanced Notification Settings). It POSTs on completion — but verify the
secretquery param (webhooks can't send custom headers) and return 200 within 11s (ack fast, process async) or it's treated as an error. - Auth is the
X-Phantombuster-Key-1header. From Workspace settings, shown once. Anyone with it can launch your agents — keep it server-side, rotate if leaked. - Mind slots + execution time. Phantom slots = concurrent automations (5/15/50 by tier); execution time = monthly run-hours (20/80/300). Long scrapes eat hours; you can't run more concurrent Phantoms than your slots. API is on all paid plans.
- Scraping runs as you (session cookie). Phantoms use your LinkedIn
li_atcookie — runs act as your account, so respect human-like limits to avoid restriction, and refresh the cookie when it expires. For account-safety strategy, route to/sales-cadence. - It's a scraper/automator, not a CRM/sequencer. Pipe the scraped leads to your CRM/sequencer (or Clay) — for outreach design use
/sales-cadence.
If you discover a gotcha, workaround, or tip not covered in references/learnings.md, append it there.
Gotchas
Best-effort from research (2026-06) — API verbatim from the docs; pricing/features from support + reviews. Confirm in-account.
- Async: launch ≠ results.
/agent/{id}/launchreturns a container id immediately; the data lands when the container finishes — webhook or poll/containers/fetch, then readfetch-result-object. - Webhooks use a
secretquery param + have an 11s timeout. No custom headers → verify the secret, not a header signature; respond 200 in <11s or it's a server error (ack then process async). X-Phantombuster-Key-1is the auth header. NotAuthorization: Bearer. Key from Workspace settings, shown once; rotate if leaked.- v2, milliseconds. v1 timestamps are seconds, v2 are ms — use v2 and don't mix.
- Session-cookie scraping has account risk. Phantoms act as your logged-in account (LinkedIn
li_at); over-aggressive runs can get the account restricted, and cookies expire. Keep volumes human, refresh cookies. - Slots + execution-time cap throughput. You can't exceed concurrent slots, and long scrapes burn monthly execution hours — size the plan to volume.
- Compliance gray area. Scraping LinkedIn/sites can violate their ToS; use responsibly and within data-protection law.
Related skills
/sales-prospect-list— Prospect-list / lead-sourcing strategy across tools (PhantomBuster is one of the scrapers) — which tool, ICP, list hygiene/sales-enrich— Contact/account enrichment strategy across vendors (pair scraped leads with enrichment)/sales-cadence— Outbound sequence strategy for the leads you scrape-/sales-do— Not sure which skill to use? The router matches any sales objective to the right skill. Install:npx skills add sales-skills/sales --skill sales-do -a claude-code
Examples
Example 1: Launch a Phantom and fetch its scraped leads via the API (developer/automation)
User says: "How do I run my LinkedIn Search Export Phantom from my backend and get the results?"
Skill does: Walks Recipe 1 — POST https://phantombuster.com/api/v2/agent/{id}/launch with the X-Phantombuster-Key-1 header (and a chosen output), which returns a container id; then poll /containers/fetch?id=… until done and read /containers/fetch-result-object?id=… for the structured leads (JSend data). Recommends a webhook instead of tight polling, and keeping the key server-side.
Result: Backend launches the scrape and ingests the leads reliably.
Example 2: Get notified when a run finishes (webhook)
User says: "I want my system pinged when a PhantomBuster run completes."
Skill does: Sets the per-agent webhook in Advanced Notification Settings, configures a secret (since webhooks can't send custom headers → verify the secret query param), and stresses the 11-second timeout — the handler must return 200 fast and process async, then call fetch-result-object for the data. Offers Zapier/Make as a no-code alternative.
Result: Run-completion events drive ingestion without polling.
Example 3: My LinkedIn account got a warning from PhantomBuster
User says: "LinkedIn flagged my account after running Phantoms — what happened?"
Skill does: Explains Phantoms run as your account via your session cookie, so aggressive volumes (connects/messages/scrapes) trigger LinkedIn's limits. Recommends staying within human-like daily caps, spacing launches, not maxing connection requests, refreshing the cookie when it expires, and warming new accounts. Routes account-safety strategy: "run: /sales-cadence safe LinkedIn automation limits."
Result: Safer automation settings and a recovery plan.
Troubleshooting
My launch succeeds but I get no data
Symptom: /agent/{id}/launch returns success but the results are empty/missing.
Cause: The run is asynchronous — launch only queues it and returns a container id; the data isn't ready until the container finishes (and you must read the result object, not the launch response).
Solution: Take the containerId from the launch response, poll /containers/fetch?id=… until it's finished (or use a webhook), then fetch /containers/fetch-result-object?id=… for the structured leads. Make sure the Phantom's output setting actually produces a result object.
My webhook isn't firing / times out
Symptom: The completion webhook never arrives or errors.
Cause: The URL wasn't set in Advanced Notification Settings, the handler took >11 seconds (cancelled → server error), or you're checking for a header signature that doesn't exist.
Solution: Set the agent's webhook URL, return 200 within 11s (ack immediately, do work async), and verify the secret query parameter (webhooks can't send custom request headers). Re-test by launching the agent.
I've run out of execution time / slots
Symptom: Phantoms won't launch or queue up.
Cause: You hit your monthly execution-time hours or your Phantom slot (concurrency) cap.
Solution: Check usage in the dashboard; reduce scrape scope (fewer profiles, narrower search), stagger launches, and free up slots by pausing idle Phantoms. Upgrade the tier if volume genuinely needs more hours/slots. For list-building strategy that minimizes wasted runs, use /sales-prospect-list.