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.
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.
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_DATAThree things you'd otherwise build: Apollo OAuth, per-rep Gmail credential storage, Sheets API auth. Handled.
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.
Each one runs on delegated identity, scoped per user.