LeadAdapter

Documentation

Governance

This is the page that matters. Every number below is read from the same configuration the software enforces, and every rule described here refuses in production exactly as it is written here.

One budget, no second pool

Automations, your AI agent, the REST API and the loadouts all draw from the same counters. There is no separate allowance for the agent and no way to get a second one.

This is the only reason the table below is worth publishing. A product with a second, unmetered path to LinkedIn has caps that describe one code path rather than the account, and every number it publishes is a lie by omission.

Every write in the product goes through one decision function before it happens. If a feature could act without it, that feature would be the bug.

The caps we publish

These are per LinkedIn profile, per day, and they reset at midnight in the profile's own timezone.

Default daily caps per LinkedIn profile, and the highest each plan may raise them to.
Channel Default Starter Pro Operator Agency Weekly
Direct messages Outbound 100 150 200 250 250
InMail Outbound 10 20 20 20 20
Connection requests Outbound 20 25 30 40 40 150
Comments 20 30 40 60 60
Reactions 60 100 150 200 200
Profile views (enrichment) 100 150 200 250 250
Search result pages 50 100 100 100 100
Posts published 3 5 5 5 5
Emails through your own provider Outbound 200 500 500 500 500

Defaults are what a newly connected profile gets. You may lower any cap freely; raising one above your plan's ceiling is refused. Every column is read from the same configuration the Governor enforces.

The autonomy dial

You choose how much a profile is allowed to do without asking. The setting is per LinkedIn profile, not per workspace, so an agency can run one client on approvals and another autonomously.

The autonomy dial, per LinkedIn profile.
Mode What it does A direct message A comment
Draft only Everything becomes a draft for you to read. Nothing is ever sent, even after you approve it. This is the rehearsal mode — use it for the first week of a new template. Waits for you Waits for you
Approve every write Every action that another person could see waits for you, including public comments and reactions. Waits for you Waits for you
Approve outbound only Default Anything that lands uninvited in someone's inbox waits for you. Public and reversible actions run inside the caps. Waits for you Runs
Autonomous within caps Actions run without asking. They are still capped, paced, de-duplicated, checked against your do-not-engage list and held outside your sending hours. Runs Runs

The default for a newly connected profile is the least autonomous setting that is still useful. A product that defaulted to full autonomy would be one bad template away from a restricted account.

Quiet hours

By default nothing is sent between 22:00 and 07:00 in the profile's own timezone. Work raised inside that window is not refused and not lost — it is held, and the answer carries the time it will run.

A weekend pause is available as well. Both are enforced on our side, where jobs are simply not handed out, and again inside the extension, which refuses to write outside the window even if it is asked to.

Pacing

Two actions from the same profile are never closer together than 45 seconds, and no profile makes more than 6 writes in any ten-minute window, whatever the mix of channels.

The gap is randomised rather than fixed. A perfectly regular interval is a signature in itself, and the second cheapest thing to detect after volume.

An action that arrives too soon is refused with a code that says how long to wait, so an agent backs off instead of retrying into a wall.

Do not engage

A person, an email address or a whole domain can be added to a do-not-engage list, by hand, by CSV, or by an agent. Nothing on the list is ever contacted again by any part of the product.

The list is checked twice: when an action is requested and again when your browser is about to perform it. Days can pass between those two moments, and the check that matters is the second one.

Anyone who replies with a stop word is added automatically, and their queued messages are cancelled. In this language the words are matched case-insensitively and on word boundaries, so "unstoppable" does not contain "stop":

  • stop
  • unsubscribe
  • not interested
  • remove me
  • opt out

De-duplication

The same person will not receive the same kind of message from the same profile twice within 30 days — unless they replied in the meantime, which makes it a conversation rather than a repeat.

This is the rule that protects you from your own enthusiasm, and from an agent that has forgotten what it did yesterday. It is enforced on a fingerprint of the profile, the target, the action type and the opening of the message, so a reworded version of the same approach is still a duplicate.

The approval queue

When your autonomy setting holds an action, it lands in a queue with the exact text that would be sent. Approve it and it goes; reject it and nothing happens.

What you read is what is sent. The message is rendered once, when the action is raised, and stored — it is not re-rendered later from a template that might resolve differently. You approved specific words for a specific person.

Nothing waits forever. An approval expires after 72 hours and is never executed afterwards. An hour-old message can be a good idea; a four-day-old one, sent without anyone looking again, is not.

Emergency stop

One click, or one tool call from your agent: every queued job for that profile is cancelled, the profile is paused, and you are notified.

Clearing it is manual and always will be. An emergency stop that lifts itself on a timer is a pause, and the moment you want one is the moment you do not yet know what went wrong.

When LinkedIn pushes back

If LinkedIn rate-limits a profile or shows it a challenge, the extension stops immediately and tells us. We park the profile for 6 hours, halve its caps for 48 hours, and notify you.

The response is automatic and deliberately blunt. The alternative — retrying to see whether it was a blip — is precisely the behaviour that turns a temporary limit into a restriction.

The audit log

Every tool call, every automation action, every approval decision and every API call is written to an audit log, including the ones that were refused. The refusals are the rows that answer "why did it not send?".

The log cannot be edited or deleted by anyone, including us. It is kept for 24 months by default. When an account is erased, the rows are anonymised rather than removed — what happened survives, who it happened to does not.

Every refusal, and what it means

When something is refused, the answer carries a code rather than a sentence, so that an agent can change its plan instead of retrying. These codes are a stable, public part of the interface.

Every refusal code, and what an agent should do about it.
Reason What it means What to do
extension_offline No paired browser is online for that profile. Wait, then retry
paced Too soon after the previous action. The answer carries how long to wait. Wait, then retry
quiet_hours Outside the profile's sending hours. The job waits and the answer carries the time it will run. Wait, then retry
rate_limited LinkedIn rate-limited the profile and it is parked while things settle. Wait, then retry
cap_reached The daily cap for that channel is spent. It resets at midnight in the profile's own timezone. Change the plan
channel_paused You have paused that channel for that profile. Change the plan
confirm_required The action is destructive and was called without confirm: true. Change the plan
consent_missing The owner of that LinkedIn profile has not granted consent yet. Change the plan
do_not_engage The person is on your do-not-engage list. Change the plan
duplicate You already sent this person the same kind of message inside the de-duplication window. Change the plan
emergency_stop Emergency stop is engaged for the profile. Only a person can clear it. Change the plan
tier_required The plan does not include that tool. The refusal names the plan that does. Change the plan

Every cap, limit, timeout and tool name on this page is read from the running product when the page loads. If the software changes, this page changes with it.