URL: /code/integrations/linkedin · Id: `page:/code/integrations/linkedin`

# LinkedIn

> Your agents post as you, find people engaging with posts on your problem, and send each a request and a first message, 20 a weekday.

Your agents post as you, find people engaging with posts on your problem, and send each a request and a first message, 20 a weekday.

```text title="Run it · Ask"
Find the property managers who commented on LinkedIn posts about late rent this month, and show me the first 25.
```

```ts title="Run it · SDK"
import { $ } from 'startup-builder'

const result = await $.try.Prospect.find({ question: 'property managers who commented on LinkedIn posts about late rent in the last 30 days', limit: 25, save: 0, maxCost: 0.5 })
```

```json title="Run it · Response"
{
  "$type": "Prospect",
  "mode": "try",
  "stored": false,
  "prospects": [
    {
      "name": "Rosa Alvarez",
      "title": "Owner",
      "organization": {
        "name": "Northgate Rentals",
        "hostname": "northgate-rentals.com"
      },
      "reason": "Commented “we still chase this by text” on a post about late rent, Oct 21",
      "hasEmail": true
    },
    {
      "name": "Maya Chen",
      "title": "Owner",
      "organization": {
        "name": "Cedar Hollow Rentals",
        "hostname": "cedar-hollow-rentals.example"
      },
      "reason": "Reacted to a post comparing rent ledgers, Oct 14",
      "hasEmail": true
    }
  ],
  "total": 38,
  "cost": {
    "usd": 0.11,
    "maxUsd": 0.5
  }
}
```

- **Connect:** Sign in once, 3 grants
- **Runs through:** [Your account or a browser agent](/code/integrations#three-ways)
- **First run:** List 25 people engaging with posts on your problem, about 0.95¢
- **Sites:** [LinkedIn](/venues#linkedin)

## Connect once
1. Call `Integration.connect` with `system: 'social'` and `venue: 'linkedin'`, then open the `connectUrl` it returns and sign in as yourself on LinkedIn.
2. Sign in once more in the browser window the platform opens; that saved session sends requests and messages, and posts as your company page if you are its admin.
3. Call `Handle.connect` for each account that posts: your profile, and your company page if you have one.

| Grant | What it unlocks | Scope |
| --- | --- | --- |
| Sign in | Your name and member id, so every Post and request is filed under your account | `openid profile email` |
| Post as you | Posts with text, an image, a document or a video, published from your profile | `w_member_social` |
| Your saved session | Connection requests, messages and company page posts, done in LinkedIn’s own screens | `browser session: linkedin.com` |

| To | Do this |
| --- | --- |
| Pause | `Integration.pause` stops every call through LinkedIn at once and keeps the token; `Integration.resume` picks up from the same cursor. |
| Reconnect | `Integration.reconnect` returns a fresh `connectUrl` that lasts one hour, and keeps the Integration's id and cursor, so nothing imports twice. |
| Disconnect | `Integration.revoke` revokes the token with LinkedIn; every record it brought in stays in your records. |

## What your agents do
| Ask | Verb | Runs through | Price |
| --- | --- | --- | --- |
| Post this as me, with the chart attached. | [`Post.publish`](/code/apps/social/publish) | Your account | Free |
| Post the same update as our company page. | [`Post.publish`](/code/apps/social/publish) | A browser agent | About 1.6¢ a step |
| Send a connection request to each of them, signed in as me, no more than 20 a weekday. | [`Message.schedule`](/code/apps/mailboxes/schedule) | A browser agent | About 1.6¢ a step |
| When they accept, send my first message within a day and one follow-up after 4 days, signed in as me. | [`Contact.enroll`](/code/apps/sequences/enroll) | A browser agent | About 1.6¢ a step |
| Answer each reply in the same LinkedIn thread, signed in as me. | [`Conversation.answer`](https://startupbuilder.dev/business/nouns/conversation/answer) | A browser agent | About 1.6¢ a step |

Calls on your own account are free.

Reading this site’s public data needs no account: [`Prospect.find`](/code/data/people/find), [`Keyword.search`](/code/data/keywords/search), [`Ad.find`](/code/data/ads/find) are Data calls (the [three ways a call runs](/code/integrations#three-ways)).

## What it holds
| Noun | The account’s object | When | Which side leads |
| --- | --- | --- | --- |
| [Post](https://startupbuilder.dev/business/nouns/post) | `share or ugcPost` | Your agent publishes from your profile or your page | Your records |
| [Prospect](https://startupbuilder.dev/business/nouns/prospect) | `person` | Someone engages with a post in your category, or accepts your request | Your records |
| [Organization](https://startupbuilder.dev/business/nouns/organization) | `organization` | A Prospect’s employer is seen for the first time | Your records |
| [Message](https://startupbuilder.dev/business/nouns/message) | `message` | A request is accepted or a reply arrives | The account |

## Events and webhooks
| Direction | Event |
| --- | --- |
| Emits | `Post.published`, `Message.created`, `Prospect.engaged`, `Contact.enrolled` |

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed ([Events and webhooks](/code/events)).

## Limits
| What | Limit | Call |
| --- | --- | --- |
| Connection requests | Capped by your standing approval at 20 a weekday, about 100 a week; LinkedIn publishes no number, and a request past your standing approval waits with `over-mandate` | [`Message.schedule`](/code/apps/mailboxes/schedule) |
| Pending requests | A request unanswered after 3 weeks is withdrawn, so pending requests never pile up | [`Message.schedule`](/code/apps/mailboxes/schedule) |
| Follow-ups | One first message and one follow-up per person; any reply stops the rest | [`Contact.enroll`](/code/apps/sequences/enroll) |
| Replies | Read from your LinkedIn inbox every 30 minutes on weekdays, since LinkedIn sends no webhook for member messages | Every call |
| Company page posts | Need your administrator or content admin role on the page | [`Post.publish`](/code/apps/social/publish) |

## Start here
| Move | The rule |
| --- | --- |
| Structure | One personal profile that names the buyer and the outcome in its headline, a featured walkthrough, and 3 posts in the last 30 days before the first request goes out. |
| Budget | No ad spend: 20 requests a weekday under your standing approval, warm sources first (people who engaged with posts in your category, then the authors of problem posts), at about 1.6¢ a browser step. |
| Creative | No note for warm sources, one line naming the shared post for cold ones. On acceptance, one message within a day that leads with the evidence and asks one easy question; one follow-up after 4 days. |
| Kill rule | Read at 200 requests: under 20% accepted means fix the profile or the targeting before sending more; under 5% replying after acceptance means rewrite the first message. |

| Benchmark | Source |
| --- | --- |
| 28.5% of requests accepted; 10.4% reply to the first message after acceptance | Vendor study of 13.2 million requests |
| A note lowers acceptance (25.3% against 27.6%) and raises replies (8.2% against 5.3%) | Vendor study of 11.5 million requests |
| About 100 requests a week per seat | Practitioner reports |
| 400 requests a month, about 12 replies, about 6 positive | Our planning number |

## Field map
| Our field | LinkedIn’s field | Notes | Calls |
| --- | --- | --- | --- |
| `Post.body` | `commentary` | Mentions and hashtags keep LinkedIn’s own annotation format | [`Post.publish`](/code/apps/social/publish) |
| `Post.media` | `content.media.id` | An image, video or document is uploaded first and posted by its URN | [`Post.publish`](/code/apps/social/publish) |
| `Post.handle` | `author` | urn:li:person for you, urn:li:organization for your page | [`Post.publish`](/code/apps/social/publish) |
| `Post.status` | `lifecycleState` | Always PUBLISHED on create; a scheduled Post is held by the platform and published at its time | [`Post.publish`](/code/apps/social/publish) |
| `Message.body` | `invitation note or message` | Typed into LinkedIn’s own screens by the browser agent | [`Message.schedule`](/code/apps/mailboxes/schedule), [`Contact.enroll`](/code/apps/sequences/enroll) |

## What try does here
Posts render as LinkedIn will show them and nothing is sent; requests and messages return each person, the note and the day it goes, and no browser session opens.

## How long a connection lasts
A connection lasts 60 days per access token, renewed from a refresh token that LinkedIn ends 365 days after your first sign-in, however often it is used.

The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with [`needs-reauth`](/code/refusals#needs-reauth).

## Formats
| Site | Format | Size | Limits |
| --- | --- | --- | --- |
| [LinkedIn](/venues#linkedin) | Feed post | None. | 3,000 characters, with one image, a document, a video or several images |
| [LinkedIn](/venues#linkedin) | Single image ad | 1200 × 628, 1200 × 1200 or 720 × 900 | Intro text 3,000 characters, 150 before it truncates; headline 200, 70 before it truncates; JPG, PNG or GIF up to 5 megabytes |
| [LinkedIn](/venues#linkedin) | Document ad | None. | PDF, DOC, DOCX, PPT or PPTX up to 100 megabytes and 300 pages; LinkedIn advises under 10 pages |

## Plays and strategies
| Kind | Where |
| --- | --- |
| Plays | [LinkedIn outbound](/plays/linkedin-outbound), [Founder voice](/plays/founder-voice), [Engagement bridge](/plays/engagement-bridge), [Warm intros](/plays/warm-intros), [Buying committee](/plays/buying-committee), [Launch week](/plays/launch-week), [Events and webinars](/plays/events-and-webinars) |
| Strategies | [Hands-on](/strategy/hands-on), [Launch and search](/strategy/launch-and-search) |

## Used by
- **Agent tasks:** [Launch day](/capabilities/earn-first-links/launch-day) · [Personal first touch](/capabilities/reach-out/personal-first-touch)

## Reference

| Call | Path | Price |
| --- | --- | --- |
| [`Post.publish`](/code/apps/social/publish) | `POST /posts/publish` | Free |
| [`Post.publish`](/code/apps/social/publish) | `POST /posts/publish` | About 1.6¢ a step |
| [`Message.schedule`](/code/apps/mailboxes/schedule) | `POST /messages/schedule` | About 1.6¢ a step |
| [`Contact.enroll`](/code/apps/sequences/enroll) | `POST /contacts/enroll` | About 1.6¢ a step |
| [`Conversation.answer`](https://startupbuilder.dev/business/nouns/conversation/answer) | `POST /conversations/answer` | About 1.6¢ a step |