LinkedIn + your AI assistant · powered by LeadAdapter
You know the people or companies you want to understand. You want your assistant to research relevant people, inspect post engagement and prepare an exact CRM shortlist for your review.
Made for: Sales operations owners
Real tasks need a LeadAdapter account. Connect LinkedIn too when your task needs fresh LinkedIn activity.
Paste this into a coding assistant that can open project files and run commands, such as Codex, Claude Code or Grok Build. You do not need to understand the code first.
Help me use this project: https://github.com/jannikco/linkedin-api
I'm not a programmer. My goal is: Research people, understand engagement and prepare a CRM
shortlist.
Read the project instructions and set it up in a new folder without overwriting my work.
Guide me through LeadAdapter and its private key setup; never ask me to paste secrets into
this chat. Run a documented sample-data demo if available, then help me get a first small
result from my connected app. Explain the result in plain English. Ask before changing
records, sending messages or publishing anything.
Help me plan a LinkedIn people-research task and explain what my LeadAdapter account must
have connected.
Research the people I specify and prepare a source-backed shortlist. Ask me to review
exact matches before promoting anyone into CRM.
Turn the people and engagement we reviewed into a short sales-research brief, with source
links and a proposed CRM shortlist for my review.
flowchart LR
A["Ask your AI"] --> B["Connect LeadAdapter"] --> C["Research people,<br/>understand engagement<br/>and…"] --> D["Review together"]
- Open LeadAdapter setup and sign in or create your account.
- Connect a LinkedIn profile if your chosen task needs fresh LinkedIn activity.
- Create the product API key through the official setup, add it privately to your AI project's environment, and ask your AI to try a small read.
What to expect: You need one LeadAdapter API key and the workspace access required by the task. LinkedIn operations also depend on the connected profile, consent and available tools. Work that is queued stays pending until a real result is returned.
Add your LeadAdapter key privately in your project settings. Keep keys out of chat and public repositories.
- Use LinkedIn through an AI assistant
- Build with the JavaScript / TypeScript client
- Build with the Python client
Technical reference: installation commands, exact capabilities and troubleshooting
Turn a people-research result into an evidence-linked shortlist.
No product key is needed for this demo. Requires Node.js 22+.
npm ci --ignore-scripts
npm run demo
# Optional: save a private report to a new file.
npm run demo -- --output ./synthetic-report.jsonOutput: a task-specific JSON review report selecting 1 of 2 invented records. It includes the completed fixture receipt and a request trace; no provider request or write occurs.
The synthetic records use normalized review fields. Review and map your actual provider schema before applying the same selection to live data.
Activate this task, then set LEADADAPTER_API_KEY in your process environment. Select an authorized connected LinkedIn profile; existing scopes, caps and review requirements apply.
npm run preflightPreflight checks access/discovery only; it does not count as a completed provider task. For an explicitly reviewed read, use the returned live schema and the exact operation/tool, arguments and stable idempotency key:
npm run verify:read -- --operation search_post --params '<reviewed request JSON>' --idempotency-key '<stable request key>' --confirm-read-onlyThe verification command performs only the selected authorized read; it refuses writes and never selects a customer operation automatically. Only a completed receipt establishes a live read. Missing access, pending jobs and uncertain outcomes remain explicit blockers. Reports contain receipt digests rather than customer payloads. No prices, trials or account allowances are changed.
One LeadAdapter API key for LinkedIn search, engagement, messaging, publishing and CRM.
Give your application a single integration for connected LinkedIn activity and the sales workflow around it. Search for people and posts, turn engagement into lead lists, enrich known profiles, work with companies, and connect the result to your CRM, content and approval processes.
Create your LeadAdapter account · See plans and pricing · API documentation · Full API reference
Download SDKs and the agent kit from GitHub Releases.
Use this API from Claude Code, Codex or Grok Build in your current coding session. Install the skills into the project where you are building:
node lib/cli.mjs agents install --client codex --scope project --project /path/to/your/project
# Replace codex with claude or grok for that client.No additional AI model key is needed. Live LinkedIn operations use your LeadAdapter API key and connected account permissions. Installation never writes credentials or overwrites conflicting files.
Ask your agent: “Research B2B software founders, produce a shortlist with evidence, and wait for my review before adding anyone to CRM.”
node lib/cli.mjs workflows research-to-crm --fixtureThen follow the research → review → CRM cookbook for authorized live reads and reviewed CRM handoff. capabilities.json and llms.txt provide concise machine-readable discovery. The SDK keeps its raw request API alongside task-level resources. Five runnable task recipes are included in examples/: people research, post engagers, profile enrichment, reviewed CRM handoff and existing CRM sync. Run each without flags for a plan; --fixture uses synthetic receipts. Live mutation recipes require explicit approvals and caller-supplied stable idempotency keys.
| Build with | What LeadAdapter provides |
|---|---|
| Search and profiles | People, post and company searches; selected profile/company enrichment. |
| Engagement | Post-engager research, comments and reactions. |
| Messaging | Stored conversations, message requests and connection workflows. |
| Publishing | Stored content, scheduled posts and publishing status. |
| CRM | Captured leads, export, companies, deals, stages and follow-up tasks. |
| Automation and events | Comment-triggered workflows, approvals, audit records and webhooks. |
- Build an account-research assistant that finds relevant people and companies, then enriches selected records.
- Turn engagement on a specific post into a reviewable lead workflow, with qualification and CRM follow-up.
- Connect your application to existing leads, content, scheduled posts and approval queues without rebuilding the sales workspace.
Built for: SaaS builders, sales operations teams, agencies and developers building LinkedIn-connected products.
Create or sign in to LeadAdapter, choose an owned workspace, complete required onboarding, and create a workspace API key under Settings → API keys. The only service credential required by this repository is LEADADAPTER_API_KEY.
Use a key with api:read for these examples. Fresh LinkedIn research needs a connected profile, supported execution access and required consent; your plan’s allowances apply. For a workspace with multiple profiles, add the documented profile_id to select one.
Find people matching your target-market keywords. This requests fresh LinkedIn research through your connected account; it can return a job_id rather than immediate search results. Keep the receipt, then poll the job as shown below.
export LEADADAPTER_API_KEY="YOUR_WORKSPACE_API_KEY"
# Keep this key for retries of this same request; use a new key for a new request.
export REQUEST_KEY="$(uuidgen)"curl --fail-with-body --silent --show-error \
-X POST "https://leadadapter.com/api/v1/linkedin/searches/people" \
-H "Authorization: Bearer $LEADADAPTER_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $REQUEST_KEY" \
--data '{"keywords":["B2B SaaS founder"],"limit":10}'The response uses LeadAdapter’s envelope: ok, data, governance context and request/action identifiers where available. Inspect the actual response; the pinned schema intentionally does not invent a universal lead, profile or search-result shape.
Node.js 22+ includes fetch; no package installation is needed for this HTTP example:
const response = await fetch("https://leadadapter.com/api/v1/linkedin/searches/people", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LEADADAPTER_API_KEY}`,
"Accept": "application/json",
"Content-Type": "application/json",
"Idempotency-Key": process.env.REQUEST_KEY
},
body: JSON.stringify({"keywords":["B2B SaaS founder"],"limit":10})
});
const receipt = await response.json();
if (!response.ok || receipt.ok === false) {
throw new Error(receipt.error?.code ?? `HTTP ${response.status}`);
}
console.log(receipt); // Inspect the returned data or queued-job receipt.Use this immediate stored-data read as a simple account check or the starting point for a lead dashboard. A new workspace can return an empty collection.
curl --fail-with-body --silent --show-error \
"https://leadadapter.com/api/v1/leads?per_page=10" \
-H "Authorization: Bearer $LEADADAPTER_API_KEY" \
-H "Accept: application/json"Search and stored leads are two entry points into the same platform. Continue with company research, profile enrichment or a CRM workflow from the matrix below.
This repository focuses on its quickstart workflows. Your LeadAdapter account also provides the following documented API surfaces; account access, adapter support and operation prerequisites apply.
| Capability | Build this | Documented API routes | Execution considerations |
|---|---|---|---|
| People and post discovery | Research prospects and relevant conversations | POST /linkedin/searches/peoplePOST /linkedin/searches/posts |
Fresh retrieval needs a connected, supported executor. |
| Company research | Build account context and inspect known company pages | POST /linkedin/searches/companiesGET /linkedin/companiesPOST /linkedin/company-enrichments |
Company-voice operations require the relevant page-admin rights. |
| Profile enrichment | Add visible professional context to selected leads | POST /linkedin/profile-enrichments |
Allowance, profile-view budget and returned coverage apply; email availability is conditional. |
| Post engagement | Research the people engaging with a selected post | POST /linkedin/post-engager-requests |
Results depend on what the connected account and adapter can retrieve. |
| Leads and export | Read, qualify and move captured lead data | GET /leadsGET /leads/export |
Workspace-scoped data; pagination is explicit. |
| Native CRM | Work with companies, pipelines, stages, deals and tasks | GET /crm/{entity}POST /crm/{entity}GET /crm/{entity}/records |
Write scopes and entity-specific inputs apply. |
| Stored content and publishing | Connect editorial review and scheduled publishing | GET /content-postsGET /scheduled-postsPOST /scheduled-posts |
Queued or scheduled work is distinct from confirmed publication. |
| Messages and connections | Build reviewed conversation and connection workflows | GET /messagesPOST /linkedin/messagesPOST /linkedin/connection-requests |
Outbound actions remain capped, permissioned and subject to applicable approval. |
| Engagement actions | Prepare relevant comments and reactions | POST /linkedin/commentsPOST /linkedin/post-reactions |
Writes require the appropriate scope and governance acceptance. |
| Comment-to-lead workflows | Connect a comment keyword to a controlled follow-up process | GET /automationsPOST /automations |
Supported triggers are comment_keyword and any_comment; DM prerequisites and limits apply. |
| Lead pages and tracked links | Connect campaigns with lead capture and tracked assets | GET /lead-pagesGET /links |
Publication and asset management are separate governed operations. |
| Approvals and audit | Review proposed actions and understand execution decisions | GET /approvalsPOST /approvals/{approval_id}/decisionsGET /actions |
Approval does not override caps or unavailable capabilities. |
| Webhooks | React to supported lead, comment, message and approval events | GET /webhooksPOST /webhooksGET /webhooks/{id}/deliveries |
Configure subscriptions and validate signed deliveries in your receiver. |
| Sales intelligence | Connect research with business context and reviewable opportunities | GET /signalsGET /sales-opportunitiesGET /business-context |
Availability follows the account’s configured features and existing records. |
| Operation ID | HTTP route, relative to /api/v1 |
Required scope |
|---|---|---|
get_extension_status_get |
GET /profiles |
api:read |
list_leads_get |
GET /leads |
api:read |
Use the API reference for complete inputs, limits and operation behavior.
Stored workspace data can return immediately. Fresh LinkedIn retrieval or outbound work may return a job receipt, including job_id, instead of a completed result. When a job is returned:
- Keep its identifier and the request’s idempotency key.
- Poll
GET /api/v1/jobs/{job_id}with the same workspace key. A documentedwait=truecan hold the read for up to25 seconds. - Inspect the terminal status and result/error:
done,failedorcancelled.queuedandleasedare still in progress.
export JOB_ID="REPLACE_WITH_RETURNED_JOB_ID"
curl --fail-with-body --silent --show-error \
"https://leadadapter.com/api/v1/jobs/$JOB_ID?wait=true" \
-H "Authorization: Bearer $LEADADAPTER_API_KEY" \
-H "Accept: application/json"An accepted request, an approved action and confirmed LinkedIn delivery are separate states. Do not report successful delivery from a queue acknowledgement.
- One workspace key, explicit scopes. Use
api:readfor the documented reads, and grant write access only for the operations your application needs. Store keys server-side; do not place them in browser bundles, commits or issue reports. - Connected-account execution. Browser-mode work uses the user’s connected browser. Supported consented cloud operations can run independently of Chrome. Availability is checked per operation; an API route does not grant unrestricted LinkedIn access.
- Governed actions. Workspace/profile caps, pacing, do-not-engage rules, account permissions and required approvals still apply. Some operations support
dry_run; check the operation’s schema before sending it. - Explicit retries. Operations requiring
Idempotency-Keyinclude fresh-data POST reads as well as writes. Reuse the same key and payload for the same logical request. Resolve uncertain outcomes before issuing a new request. - Useful errors. Handle permission/capability refusals, validation errors and429 pacing responses. Preserve request identifiers for support and follow any returned retry guidance.
This repository publishes a runnable API recipe under MIT. LeadAdapter’s hosted application, connected-account execution, governance, data storage and commercial service remain private. The public code does not include the service backend or a self-hosted substitute for a LeadAdapter account. This is an independent LeadAdapter integration, not an official LinkedIn API or LinkedIn-endorsed SDK.
- Activate this workflow in LeadAdapter — the selected project and repository campaign stay with your signup.
- Plans and pricing — check current feature access and allowances before production use.
- TypeScript SDK, Python SDK and MCP server.
- API quickstart, complete reference, MCP guide and public OpenAPI.
- Integration directory.
This code is checked with contract fixtures; the MCP artifact also tests stdio tools/call. These checks establish client behavior, not live LinkedIn provider execution or conversion outcomes. See integration.json and SHA256SUMS for the recorded artifact evidence. The source contract is LeadAdapter’s public OpenAPI.
For a reproducible client bug, open a repository issue with the operation ID and a sanitized request identifier. For account access, plans or execution availability, use LeadAdapter’s in-app support. Never include API keys, personal lead data or session material.