Skip to content
Talk to an Engineer Dashboard

Connect to PhantomBuster to automate web scraping and data extraction workflows. Launch, monitor, and manage automation agents that extract data from LinkedIn, Instagram, Twitter, and hundreds of other platforms.

PhantomBuster logo

Supports authentication: API Key

Register your PhantomBuster API key with Scalekit so it can authenticate and proxy automation requests on behalf of your users. PhantomBuster uses API key authentication — there is no redirect URI or OAuth flow.

  1. Get your PhantomBuster API key

    • Sign in to phantombuster.com and go to SettingsAPI in the left sidebar.

    • Your API key is displayed on this page. Click the copy icon to copy it. If you need a new key, click Regenerate.

    PhantomBuster Settings API page showing the API key field with copy button

  2. Create a connection in Scalekit

    • In Scalekit dashboard, go to Agent AuthCreate Connection. Find PhantomBuster and click Create.

    • Note the Connection name — you will use this as connection_name in your code (e.g., phantombuster).

    Scalekit connection configuration page for PhantomBuster showing the connection name and API Key authentication type

  3. Add a connected account

    Connected accounts link a specific user identifier in your system to a PhantomBuster API key. Add accounts via the dashboard for testing, or via the Scalekit API in production.

    Via dashboard (for testing)

    • Open the connection you created and click the Connected Accounts tab → Add account.

    • Fill in:

      • Your User’s ID — a unique identifier for this user in your system (e.g., user_123)
      • API Key — the PhantomBuster API key you copied in step 1
    • Click Save.

    Add connected account form for PhantomBuster in Scalekit dashboard showing User ID and API Key fields

    Via API (for production)

    await scalekit.actions.upsertConnectedAccount({
    connectionName: 'phantombuster',
    identifier: 'user_123',
    credentials: { api_key: 'your-phantombuster-api-key' },
    });

Once a connected account is set up, call the PhantomBuster API through the Scalekit proxy. Scalekit injects the API key as the X-Phantombuster-Key header automatically — you never handle credentials in your application code.

Proxy API calls

import { ScalekitClient } from '@scalekit-sdk/node';
import 'dotenv/config';
const connectionName = 'phantombuster'; // connection name from your Scalekit dashboard
const identifier = 'user_123'; // your user's unique identifier
// Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
process.env.SCALEKIT_ENV_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;
// List all agents via Scalekit proxy — no API key needed here
const result = await actions.request({
connectionName,
identifier,
path: '/api/v2/agents',
method: 'GET',
});
console.log(result.data);

Scalekit tools

Use execute_tool to call PhantomBuster tools directly from your code. Scalekit resolves the connected account, injects the API key, and returns a structured response — no raw HTTP or credential management needed.

Launch an agent and retrieve results

The most common PhantomBuster workflow: launch an automation agent, stream its console output while it runs, then read the final result.

examples/phantombuster_launch.py
import scalekit.client, os, time
from dotenv import load_dotenv
load_dotenv()
scalekit_client = scalekit.client.ScalekitClient(
client_id=os.getenv("SCALEKIT_CLIENT_ID"),
client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions
connection_name = "phantombuster"
identifier = "user_123"
# Step 1: Resolve the connected account for this user
response = actions.get_or_create_connected_account(
connection_name=connection_name,
identifier=identifier
)
connected_account = response.connected_account
# Step 2: Find the agent you want to run
agents = actions.execute_tool(
tool_name="phantombuster_agents_fetch_all",
connected_account_id=connected_account.id,
tool_input={}
)
agent_id = agents.result[0]["id"] # pick the first agent, or filter by name
# Step 3: Launch the agent
launch_result = actions.execute_tool(
tool_name="phantombuster_agent_launch",
connected_account_id=connected_account.id,
tool_input={
"id": agent_id,
"output": "result-object",
}
)
container_id = launch_result.result["containerId"]
print(f"Agent launched. Container ID: {container_id}")
# Step 4: Poll for output until the agent finishes
output_pos = 0
while True:
output = actions.execute_tool(
tool_name="phantombuster_container_fetch_output",
connected_account_id=connected_account.id,
tool_input={"id": container_id, "fromOutputPos": output_pos}
)
print(output.result.get("output", ""), end="", flush=True)
output_pos = output.result.get("nextOutputPos", output_pos)
if output.result.get("status") in ("finished", "error"):
break
time.sleep(3) # poll every 3 seconds
# Step 5: Fetch the structured result
final_result = actions.execute_tool(
tool_name="phantombuster_container_fetch_result",
connected_account_id=connected_account.id,
tool_input={"id": container_id}
)
print("Scraped profiles:", final_result.result)

Save scraped profiles as leads

After a scraping run, bulk-save extracted profiles to a PhantomBuster lead list for downstream CRM enrichment or outreach.

examples/phantombuster_save_leads.py
# First: fetch available lead lists (or create one in the PhantomBuster dashboard)
lists = actions.execute_tool(
tool_name="phantombuster_lists_fetch_all",
connected_account_id=connected_account.id,
tool_input={}
)
list_id = lists.result[0]["id"] # use the first list, or filter by name
# Bulk-save up to 1,000 profiles in one call — more efficient than looping
actions.execute_tool(
tool_name="phantombuster_leads_save_many",
connected_account_id=connected_account.id,
tool_input={
"listId": list_id,
"leads": [
{
"firstName": p.get("firstName"),
"lastName": p.get("lastName"),
"email": p.get("email"),
"linkedinUrl": p.get("linkedinUrl"),
"company": p.get("company"),
"jobTitle": p.get("title"),
"additionalFields": {
"source": "phantombuster-scraper",
"agentId": agent_id,
"containerId": container_id,
},
}
for p in final_result.result
],
}
)
print(f"{len(final_result.result)} leads saved to list {list_id}.")

Check resource usage before running agents

Avoid quota errors by verifying execution time and credit balances before launching a large scraping run.

examples/phantombuster_check_resources.py
resources = actions.execute_tool(
tool_name="phantombuster_org_fetch_resources",
connected_account_id=connected_account.id,
tool_input={}
)
exec_time = resources.result.get("executionTime", {})
ai_credits = resources.result.get("aiCredits", {})
if exec_time.get("remaining", 0) < 30:
raise RuntimeError(
f"Insufficient execution time: {exec_time.get('remaining')} min remaining. "
"Upgrade at phantombuster.com/pricing or wait for your plan to reset."
)
print(f"Execution time: {exec_time['remaining']} min remaining ({exec_time.get('used')} used)")
print(f"AI credits: {ai_credits.get('remaining', 'N/A')}")

Run AI completions on scraped data

Use PhantomBuster’s AI service to extract structured data from raw agent output — such as parsing job titles into seniority levels or extracting skills from profile summaries.

examples/phantombuster_ai_enrichment.py
# Extract structured data from a raw LinkedIn profile headline
completion = actions.execute_tool(
tool_name="phantombuster_ai_completions",
connected_account_id=connected_account.id,
tool_input={
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Extract the seniority level and primary skill from this LinkedIn headline. Return JSON only.",
},
{
"role": "user",
"content": "Senior Software Engineer at Acme Corp | React, TypeScript, GraphQL",
},
],
"responseSchema": {
"type": "object",
"properties": {
"seniority": {"type": "string", "enum": ["junior", "mid", "senior", "lead", "exec"]},
"primarySkill": {"type": "string"},
},
"required": ["seniority", "primarySkill"],
},
}
)
print("Parsed profile:", completion.result)
# → {'seniority': 'senior', 'primarySkill': 'React'}

LangChain integration

Let an LLM decide which PhantomBuster tool to call based on natural language. This example builds an agent that can manage automation runs and leads in response to user input.

examples/phantombuster_langchain.py
import scalekit.client, os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_core.prompts import (
ChatPromptTemplate, SystemMessagePromptTemplate,
HumanMessagePromptTemplate, MessagesPlaceholder, PromptTemplate
)
load_dotenv()
scalekit_client = scalekit.client.ScalekitClient(
client_id=os.getenv("SCALEKIT_CLIENT_ID"),
client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions
identifier = "user_123"
# Resolve connected account (API key auth — no OAuth redirect needed)
actions.get_or_create_connected_account(
connection_name="phantombuster",
identifier=identifier
)
# Load all PhantomBuster tools in LangChain format
tools = actions.langchain.get_tools(
identifier=identifier,
providers=["PHANTOMBUSTER"],
page_size=100
)
prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate(prompt=PromptTemplate(
input_variables=[],
template=(
"You are a PhantomBuster automation assistant. "
"Use the available tools to manage agents, check resource usage, "
"manage leads, and analyse automation run results."
)
)),
MessagesPlaceholder(variable_name="chat_history", optional=True),
HumanMessagePromptTemplate(prompt=PromptTemplate(
input_variables=["input"], template="{input}"
)),
MessagesPlaceholder(variable_name="agent_scratchpad")
])
llm = ChatOpenAI(model="gpt-4o")
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.invoke({
"input": "List all my agents, show which ones ran in the last 24 hours, and tell me how many leads are in each list"
})
print(result["output"])

Permanently delete a PhantomBuster agent and all its associated data. This action is irreversible.

NameTypeRequiredDescription
agentIdstringYesThe unique identifier of the agent to permanently delete.

Retrieve details of a specific PhantomBuster agent by its ID. Returns agent name, script, schedule, launch type, argument configuration, and current status.

NameTypeRequiredDescription
agentIdstringYesThe unique identifier of the agent to retrieve.

Get the output of the most recent container of an agent. Designed for incremental data retrieval — use fromOutputPos to fetch only new output since the last call.

NameTypeRequiredDescription
fromOutputPosnumberNoStart output from this byte position (for incremental fetching).
idstringYesID of the agent to fetch output from.
prevContainerIdstringNoRetrieve output from the container after this previous container ID.
prevRuntimeEventIndexnumberNoReturn runtime events starting from this index.
prevStatusstringNoPreviously retrieved status from user-side (for delta detection).

Launch a PhantomBuster automation agent asynchronously. Starts the agent execution immediately and returns a container ID to track progress. Use the Get Container Output or Get Container Result tools to retrieve results.

NameTypeRequiredDescription
agentIdstringYesThe unique identifier of the agent to launch.
argumentsobjectNoJSON object of input arguments to pass to the agent for this execution.
outputstringNoOutput mode for the launch response.
saveArgumentsbooleanNoWhether to persist the provided arguments as the agent’s default arguments for future launches.

Schedule a PhantomBuster agent to launch within a specified number of minutes. Useful for delayed execution without setting up a full recurring schedule.

NameTypeRequiredDescription
argumentobjectNoInput arguments to pass to the agent for this execution (object or JSON string).
idstringYesID of the agent to schedule.
minutesintegerYesNumber of minutes from now after which the agent will launch.
saveArgumentbooleanNoIf true, saves the provided argument as the agent’s default for future launches.

Create a new PhantomBuster agent or update an existing one. Supports configuring the script, schedule, proxy, notifications, execution limits, and launch arguments. Pass an ID to update; omit to create.

NameTypeRequiredDescription
argumentobjectNoDefault launch argument for the agent (object or JSON string).
branchstringNoScript branch to use (e.g., main, staging).
executionTimeLimitnumberNoMaximum execution time in seconds before the agent is killed.
idstringNoID of the agent to update. Omit to create a new agent.
launchTypestringNoHow the agent is launched.
maxParallelismnumberNoMaximum number of concurrent executions allowed for this agent.
maxRetryNumbernumberNoMaximum number of retries before aborting on failure.
namestringNoDisplay name for the agent.
proxyAddressstringNoHTTP proxy address or proxy pool name.
proxyPasswordstringNoProxy authentication password.
proxyTypestringNoProxy configuration type.
proxyUsernamestringNoProxy authentication username.
scriptstringNoScript slug or name to assign to this agent.

Stop a currently running PhantomBuster agent execution. Gracefully halts the agent and saves any partial results collected up to that point.

NameTypeRequiredDescription
agentIdstringYesThe unique identifier of the agent to stop.

Retrieve all automation agents in the PhantomBuster organization. Returns agent IDs, names, associated scripts, schedules, and current status.

Retrieve all deleted agents in the PhantomBuster organization. Returns agent IDs, names, creation timestamps, deletion timestamps, and who deleted each agent.

Disable automatic launch for ALL agents in the current PhantomBuster organization. Agents will remain but will only run when launched manually.

Get an AI text completion from PhantomBuster’s AI service. Supports multiple models including GPT-4o and GPT-4.1-mini. Optionally request structured JSON output via a response schema.

NameTypeRequiredDescription
messagesarray<object>YesArray of conversation messages. Each must have a role (system, assistant, or user) and content string.
modelstringNoAI model to use for the completion.
temperaturenumberNoSampling temperature (0–2). Lower = more deterministic, higher = more creative.

Create a new script branch in the current PhantomBuster organization.

NameTypeRequiredDescription
namestringYesName for the new branch. Only letters, numbers, underscores, and hyphens allowed. Max 50 characters.

Permanently delete a branch by ID from the current PhantomBuster organization.

NameTypeRequiredDescription
idstringYesID of the branch to delete.

Release (promote to production) specified scripts on a branch in the current PhantomBuster organization.

NameTypeRequiredDescription
namestringYesName of the branch to release.
scriptIdsarray<string>YesArray of script IDs to release on this branch.

Retrieve all branches associated with the current PhantomBuster organization.

Attach to a running PhantomBuster container and stream its console output in real-time. Returns a live stream of log lines as the agent executes.

NameTypeRequiredDescription
idstringYesID of the running container to attach to.

Retrieve a single PhantomBuster container by its ID. Returns status, timestamps, launch type, exit code, and optionally the full output, result object, and runtime events.

NameTypeRequiredDescription
idstringYesID of the container to fetch.
withNewerAndOlderContainerIdbooleanNoSet to true to include the IDs of the next and previous containers for this agent.
withOutputbooleanNoSet to true to include the container’s console output.
withResultObjectbooleanNoSet to true to include the container’s result object.
withRuntimeEventsbooleanNoSet to true to include runtime events (progress, notifications, etc.).

Retrieve the console output and execution logs of a specific PhantomBuster container (agent run). Useful for monitoring execution progress, debugging errors, and viewing step-by-step agent activity.

NameTypeRequiredDescription
containerIdstringYesThe unique identifier of the container whose output to retrieve.

Retrieve the final result object of a completed PhantomBuster container (agent run). Returns the structured data extracted or produced by the agent, such as scraped profiles, leads, or exported records.

NameTypeRequiredDescription
containerIdstringYesThe unique identifier of the container whose result to retrieve.

Retrieve all execution containers (past runs) for a specific PhantomBuster agent. Returns container IDs, status, launch type, exit codes, timestamps, and runtime events for each execution.

NameTypeRequiredDescription
agentIdstringYesThe unique identifier of the agent whose containers to retrieve.

Permanently delete multiple leads from PhantomBuster organization storage by their IDs.

NameTypeRequiredDescription
idsarray<string>YesArray of lead IDs to delete.

Fetch paginated leads belonging to a specific lead list in PhantomBuster organization storage.

NameTypeRequiredDescription
includeTotalCountbooleanNoInclude the total count of leads in the response.
listIdstringYesID of the lead list to fetch leads from.
paginationOffsetintegerNoOffset for pagination.
paginationOrderstringNoSort order for pagination.
paginationSizeintegerNoNumber of leads per page.

Save a single lead to PhantomBuster organization storage.

NameTypeRequiredDescription
leadobjectYesLead data object to save.

Save multiple leads at once to PhantomBuster organization storage.

NameTypeRequiredDescription
leadsarray<object>YesArray of lead objects to save.

Permanently delete a lead list from PhantomBuster organization storage by its ID.

NameTypeRequiredDescription
idstringYesID of the lead list to delete.

Retrieve a specific lead list from PhantomBuster organization storage by its ID.

NameTypeRequiredDescription
idstringYesID of the lead list to fetch.

Retrieve all lead lists in the PhantomBuster organization’s storage.

Retrieve the country associated with an IPv4 or IPv6 address using PhantomBuster’s geolocation service.

NameTypeRequiredDescription
ipstringYesIPv4 or IPv6 address to look up.

Export a CSV file containing agent usage metrics for the current PhantomBuster organization over a specified number of days (max 6 months).

NameTypeRequiredDescription
daysstringYesNumber of days of usage data to export. Maximum is ~180 days (6 months).

Export a CSV file containing container usage metrics for the current PhantomBuster organization. Optionally filter to a specific agent.

NameTypeRequiredDescription
agentIdstringNoFilter the export to a specific agent ID.
daysstringYesNumber of days of usage data to export. Maximum is ~180 days (6 months).

Retrieve details of the current PhantomBuster organization including plan, billing, timezone, proxy config, and CRM integrations.

NameTypeRequiredDescription
withCrmIntegrationsbooleanNoInclude the organization’s CRM integrations.
withCustomPromptsbooleanNoInclude the organization’s custom prompts.
withGlobalObjectbooleanNoInclude the organization’s global object in the response.
withProxiesbooleanNoInclude the organization’s proxy pool configuration.

Retrieve the agent groups and their ordering for the current PhantomBuster organization.

Retrieve the current PhantomBuster organization’s resource usage and limits. Returns daily and monthly usage for execution time, mail, captcha, AI credits, SERP credits, storage, and agent count.

phantombuster_org_fetch_running_containers

Section titled “phantombuster_org_fetch_running_containers”

List all currently executing containers across the PhantomBuster organization. Returns container IDs, associated agent IDs/names, creation timestamps, launch types, and script slugs.

Update the agent groups and their ordering for the current PhantomBuster organization. The order of groups and agents within groups is preserved as provided.

NameTypeRequiredDescription
agentGroupsarray<unknown>YesArray of agent groups. Each item is either an agent ID string or an object with id, name, and agents array.

Save a new contact to the organization’s connected CRM (HubSpot). Requires a CRM integration to be configured in the PhantomBuster organization settings.

NameTypeRequiredDescription
companystringNoCompany the contact works at.
crmNamestringYesThe CRM to save the contact to.
emailstringNoContact’s email address.
firstnamestringYesContact’s first name.
jobtitlestringNoContact’s job title.
lastnamestringYesContact’s last name.
pb_linkedin_profile_urlstringYesLinkedIn profile URL of the contact.
phonestringNoContact’s phone number.

Retrieve a specific PhantomBuster script by ID including its manifest, argument schema, output types, and optionally the full source code.

NameTypeRequiredDescription
branchstringNoBranch of the script to fetch.
idstringYesID of the script to fetch.
withCodebooleanNoSet to true to include the script’s source code in the response.

Retrieve all scripts associated with the current PhantomBuster user. Returns script IDs, names, slugs, descriptions, branches, and manifest details.

NameTypeRequiredDescription
branchstringNoFilter scripts by branch name.
excludestringNoExclude modules or non-modules from results.
orgstringNoFilter scripts by organization.