Agent Templates
Outbound prospecting agent

AI outbound prospecting agent that sources leads and drafts the email

Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.

Outbound prospecting agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Find 10 VP Engineering prospects and draft outreach
J
Searching Apollo for ICP matches
Search and enrich contacts
apollo_search_contacts
Log to Google Sheets
googlesheets_append_values
Save Gmail draft
gmail_create_draft
Prospecting run: VP Engineering
Top match (score: 94)
"Sarah Lin, VP Eng, Fintech (280 employees)"
Gmail draft saved, logged to Sheets
Result
8 of 10 scored ≥70 — drafts saved to Gmail
10 contacts logged to Google Sheets
Message Claude...
Trusted by teams shipping agents to production
Outbound prospecting agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Find 10 VP Engineering prospects and draft outreach
J
Searching Apollo for ICP matches
Search and enrich contacts
apollo_search_contacts
Log to Google Sheets
googlesheets_append_values
Save Gmail draft
gmail_create_draft
Prospecting run: VP Engineering
Top match (score: 94)
"Sarah Lin, VP Eng, Fintech (280 employees)"
Gmail draft saved, logged to Sheets
Result
8 of 10 scored ≥70 — drafts saved to Gmail
10 contacts logged to Google Sheets
Message Claude...

How the agent finds, scores, and emails prospects in four steps

A real working agent you can deploy

This repo uses a single SCALEKIT_USER_ID env var to simulate one user. In production, pass each user's real ID as the identifier on every Scalekit call, and send them an authorization link whenever their connector status is not ACTIVE. Apollo, Gmail, and Google Sheets tokens all refresh automatically.

01
Authorize, then orchestrate
run_flow.py
Every connection is authorized once via a one-time link. Scalekit refreshes tokens for you across all three connectors. ensure_authorized() hard-stops if Gmail is unavailable; Apollo and Google Sheets surface magic links and wait. Set USE_SAMPLE_DATA=true to skip Apollo auth and run with bundled test prospects.
run_flow.py
connect = ScalekitClient(
    env_url=SCALEKIT_ENV_URL,
    client_id=SCALEKIT_CLIENT_ID,
    client_secret=SCALEKIT_CLIENT_SECRET,
)

def ensure_authorized(connector):
    account = connect.actions.get_or_create_connected_account(
        connection_name=connector,
        identifier=USER_ID,
    )
    if account.status != "ACTIVE":
        link = connect.actions.get_authorization_link(
            connection_name=connector,
            identifier=USER_ID,
        )
        print(f"Authorize {connector}:\n{link}")
        input("Press Enter after authorization...")

ensure_authorized("gmail")         # hard-stop if unavailable
ensure_authorized("googlesheets")
ensure_authorized("apollo")        # optional with USE_SAMPLE_DATA
02
Search and score prospects in Apollo
run_flow.py
03
Draft personalized cold emails
run_flow.py
04
Log prospects to Google Sheets
run_flow.py

Agents that prospect outbound, without the auth plumbing

Three things you'd otherwise build: Apollo OAuth, per-rep Gmail credential storage, Sheets API auth. Handled.

1
Install
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
terminal
npx @scalekit-inc/cli setup
# select your coding agent
# enable scalekit MCP server on coding agent
2
You have the Scalekit authstack plugin installed (AgentKit + SaaSKit skills and MCP auth). Before coding, auto-load the AgentKit skills relevant to connectors (Apollo, Gmail, Google Sheets) and use the Scalekit MCP server to validate tool calls instead of hand-written API logic.

Search Apollo for ICP-matching contacts, enrich any missing data, and score each prospect 0-100 via the appropriate AgentKit connector tools. Draft a personalized cold email per prospect and save it to Gmail Drafts (never send), then log every prospect to Google Sheets. Ask before using write tools (saving Gmail drafts or writing to Sheets); searching, enriching, and scoring run without asking.
Why choose Scalekit

Delegated identity. Not service accounts.

Credentials never touch agent code or LLM context. The agent acts as the user, not as a shared bot.
Delegated OAuth - Agent reads your calendar, your inbox — scoped to the authorizing identity, not org-wide.
Credentials outside agent runtime  -  Tokens never touch agent code or LLM context. Both failure modes covered.
Token lifecycle automatic  -  Refresh, expiry, rotation across all connectors. One SDK call. Zero management code.
200+ prebuilt connectors  -  Google, Slack, HubSpot, GitHub, Jira, Notion, Salesforce — same auth pattern everywhere.
Try other Agent Templates

Prebuilt agents you can ship today

Each one runs on delegated identity, scoped per user.

SALES
Sales call prep agent
Read tomorrow's calls from Google Calendar, mine Granola notes and Attio history, and deliver each rep a prep brief in Slack.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
OPS
Email-to-calendar scheduling agent
Read scheduling intent out of Gmail threads, resolve mutual free time, and create the Google Calendar event.
SUPPORT
Freshdesk CSAT follow-up agent
Spot resolved Freshdesk tickets, email the CSAT survey from Gmail, and write the score back onto the ticket.

Build your own
multi-connector agent

Add connectors. Change the LLM. Same delegated auth pattern.