NewLeaving Unipile? Switch in two lines

The API for LinkedIn and X.

Read profiles and inboxes. Send messages, invitations, posts and replies. Every account runs in its own session, on its own IP, at a human pace, so the accounts you connect stay healthy.

  • 7-day free trial
  • No card needed
  • Dry-run any write
POST/chats/{chat_id}/messages
curl -X POST \
  https://direct.lempile.com/api/v1/chats/$CHAT/messages \
  -H "X-API-KEY: $LEMPILE_KEY" \
  -F account_id=$ACCOUNT \
  -F text="Thanks for connecting, Sarah!"
Response201 CreatedSent from the account's own session
{
  "object": "MessageSent",
  "message_id": "2-_vptc2cwMTMwIQ"
}
  • Unipile-compatible LinkedIn API
  • SerpApi-compatible Google results
  • Dry-run on every write
  • Servers in the EU

Products

Everything you need to build on LinkedIn and X.

Pick one API or use them together. Each speaks a format your code already knows.

Switch from Unipile

Keep your code. Change two lines.

Lempile answers Unipile's LinkedIn paths, fields, status codes and error types. Point your client at Lempile, swap the key, ship.

  1. 01Same paths. /users/me, /chats, /chats/{chat_id}/messages and the rest.
  2. 02Same objects. UserProfile, Chat, Message and Post, checked against Unipile's schemas.
  3. 03Safe fallback. Anything we don't cover answers Unipile's own 501, so that one call can go back.
lib/linkedin.js2 lines changed
1// Your Unipile client, unchanged
2Removed: const BASE = "https://api8.unipile.com:13851/api/v1";
3Removed: const KEY = process.env.UNIPILE_API_KEY;
2Added: const BASE = "https://direct.lempile.com/api/v1";
3Added: const KEY = process.env.LEMPILE_API_KEY;
4
5export function linkedin(path, init = {}) {
6 return fetch(BASE + path, {
7 ...init, headers: { "X-API-KEY": KEY },
8 });
9}
Every other line of your integration stays as it is.

Account safety

LinkedIn sees the same person it always sees.

No fresh logins, no shared IPs, no bursts. Every account keeps one session, one address and one pace, the way a person would.

1 session

The account's own login

Calls reuse the account's signed-in session. No new login for each request.

1 IP

The account's own address

Every call leaves through that account's proxy, with its own Chrome fingerprint.

1.5–3 s

Between two calls

One call at a time per account, and at most 1,500 a day.

15 min

Rest when LinkedIn asks

A "too many requests" pauses that account on its own. Your code gets retry_after.

See pacing and limits in the docs

Built for production

The parts you'd build yourself, already done.

Real-time webhooks

New messages, reads, reactions, new connections and account status, pushed as they happen.

Dry-run any write

Add ?dry_run=true to see exactly what LinkedIn would receive. Nothing is sent.

Retries that never double-send

Send an Idempotency-Key with a write. The same key never goes out twice.

Hosted auth links

Send your user a link. They connect their account, you get an account_id back.

Errors you can branch on

Stable status codes and error types, with the exact reason LinkedIn refused.

Docs your coding agent can read

Ask AI, llms.txt and an MCP server, so Claude or Cursor writes the integration with you.

Open the API reference

Pricing

Pay per connected account. That's it.

One offer with every endpoint and no per-call fees. The more accounts you connect, the less each one costs.

25accounts

Volume tiers

$5.50/ account / month

25 × $5.50 = $137.50 / month

Start your 7-day free trial

No card needed · Cancel anytime · Billed monthly

Connected accountsPrice in USD, excl. VAT
  • Up to 10$55 / month in total
  • 11 to 50$5.50 / account
  • 51 to 200$5.00 / account
  • 201 to 1,000$4.50 / account
  • 1,001 to 5,000$4.00 / account
  • 5,001 and more$3.50 / account

In every plan

  • Every endpoint, for every connected account
  • No per-call or per-message fees
  • Real-time webhooks and hosted auth
  • LinkedIn and X accounts cost the same

You're billed on the most accounts connected at the same time during the month. Prices exclude VAT: 20% is added in France and for EU customers without a VAT number; EU businesses with one are reverse-charged. Over 5,000 accounts? Talk to us

FAQ

Questions, answered.

Something else? Write to us.

Talk to us
Will LinkedIn restrict the accounts I connect?
No API can promise it never happens. Lempile keeps the risk low: each account keeps its own session and IP, calls are paced 1.5 to 3 seconds apart with a cap of 1,500 a day, and an account rests 15 minutes whenever LinkedIn asks it to slow down.
I'm on Unipile. How long does switching take?
Change the base URL and the key, reconnect your accounts through a hosted auth link, and register your webhooks again. Paths, fields and errors stay the same.
How is the monthly bill counted?
By the most accounts connected at the same time during the month, whatever their status. Up to 10 accounts cost €49 in total. From 11 on, every account costs the rate of your tier: 60 accounts are 60 × €4.50, so €270 a month. Prices exclude VAT.
Can I test writes without sending anything?
Yes. Add ?dry_run=true to any write and you get back exactly what LinkedIn would receive. Nothing is sent.
Do you support Sales Navigator or Recruiter?
Not yet. Lempile serves LinkedIn's classic features. Sales Navigator and Recruiter calls answer a clear feature_not_subscribed error.
Where is my users' data kept?
On our own servers in the EU. Account sessions are stored encrypted, for six hours at most.

Your first call in 60 seconds.

Create a key, connect an account, call /users/me. That's the whole setup.

$ curl direct.lempile.com/api/v1/users/me -H "X-API-KEY: …"