COMMAND LINE

120+ LinkedIn actions.
One command line.

The curviate CLI is a scriptable terminal client for Curviate, the LinkedIn platform for AI agents. JSON output when piped, stable exit codes, cursor pagination, and a preview flag on every write. Built for shell scripts, cron jobs, and agent loops in Claude Code or Codex.

Curviate/curviate-cli· open source on GitHub
120+ LinkedIn actionsSales Nav + Recruiter support20+ webhook event typesEU data residency
terminal
$ curviate account list ACCOUNT ID NAME STATUS PREMIUM acc_8f3ka92m Alice Berg connected sales_navigator acc_2mq0x7dd Jonas Weber connected recruiter acc_x01pt4ve Studio Nord connected core # pipe it and the same command emits JSON $ curviate account list | jq '.[0].account_id' "acc_8f3ka92m" $
01QUICK START

How do I install the Curviate CLI?

Install the CLI from npm, authenticate with your API key, and run your first command. Node.js 18 or later is required; the binary is curviate.

install
# Install globally from npm
npm install -g @curviate/cli

# Verify
curviate --version

Authenticate with the API key from your Curviate dashboard. The interactive prompt masks the key; nothing is echoed or logged.

login
curviate login

Connect a LinkedIn account in the dashboard, then point the CLI at it once:

first commands
# List your connected accounts
curviate account list

# Set a default account so you never type --account again
curviate config set-account acc_YOUR_ACCOUNT_ID

# Your LinkedIn profile, from the terminal
curviate profile me

That is the whole setup. Every command from here on works against the account you set. For the full authentication walkthrough, including cookie-based connect, read the docs: authentication and accounts.

No account yet? It takes about a minute and your 7-day trial starts the moment you sign up.

02THE SURFACE

What can you do with it?

Everything Curviate ships is reachable from the terminal: the platform exposes 120+ LinkedIn actions, and the CLI organizes them into 16 command groups. Search people, companies, posts and jobs. Send and answer connection requests. Read and send messages. Publish and comment. Manage jobs, company pages, invitations and webhooks. Work Sales Navigator lead lists and Recruiter projects, with 30+ actions dedicated to those two premium surfaces alone.

searchsearch people · search companies · search jobs · search postsgroup
profileprofile me · profile view · profile visitors · profile ssigroup
connectconnect · connect list --sent · connect accept · connect withdrawgroup
messagemessage send · message inmail · message reactgroup
inboxinbox list · inbox chats · inbox searchgroup
postpost create · post react · post save · post commentsgroup
commentcomment add · comment reply · comment reactgroup
companycompany view · company followers · company inbox · company invitegroup
jobjob list · job publish · job applicants · job closegroup
sales-navsales-nav search people · sales-nav leads save · sales-nav listspremium
recruiterrecruiter projects list · recruiter pipeline save · recruiter searchpremium
webhookwebhook create · webhook list · webhook deliveriesgroup
accountaccount list · account status · account connectgroup
configconfig set-account · config get · config pathgroup

Browse the full, honest inventory of every action on one page: the LinkedIn actions catalogue.

03SCRIPTS + AGENTS

Why does a CLI matter for AI agents?

Because agents already live in the terminal. An agent running in Claude Code or Codex can call curviate the way it calls git or gh: read JSON from stdout, branch on exit codes, and page through results without a browser, a session cookie, or a scraping script. Humans get the same benefits in shell scripts and cron jobs.

The flags that make it scriptable, on every command:

FlagWhat it does
--jsonFull machine-readable output. Automatic whenever stdout is not a TTY, so pipes just work.
--fields id,nameProject the response down to exactly the fields you name.
--allStream every page as NDJSON; --max-pages bounds it.
--previewPrint the exact request a write would send, without sending it.
--accountAct as any of your connected accounts; set a default once with config set-account.
stream a search
# Find people, stream all pages as NDJSON, keep two fields per row
curviate search people --keywords "platform engineer" --all --fields id,name
preview a write
# See exactly what a connection request would send, without sending it
curviate connect https://www.linkedin.com/in/example-profile \
  --note "Enjoyed your write-up on typed infrastructure." --preview

When a write is rejected or a LinkedIn-side quota bites, the error comes back structured: a stable code, whether the problem is user-fixable, whether a retry is likely to succeed, and how long to wait. Your script branches on it; no HTML parsing, no guessing.

04WHERE IT FITS

Where the CLI fits

If you occasionally need one profile looked up, a browser extension is fine. The CLI exists for the work between and beyond: repeatable, scripted, agent-driven LinkedIn operations that run in CI, cron, and Claude Code loops.

Curviate CLIBrowser automation tools
Getting accessnpm install, per-seat pricing, no approval processInstall an extension
Sales Navigator and RecruiterAvailable: 30+ dedicated actionsFragile: breaks when the page changes
ScriptabilityJSON output, stable exit codes, NDJSON pagingLimited; UI-bound
Fit for AI agentsRuns in Claude Code and Codex loops todayAgents cannot reliably drive a browser UI
Pipes & automationComposes with jq, cron, CI and shell pipelinesManual, click by click

Underneath sits the REST API; the CLI is built on the typed SDK, and chat agents get the same surface through the MCP server.

05FAQ

Questions, answered

Run npm install -g @curviate/cli (Node.js 18 or later), then curviate login with the API key from your Curviate dashboard. The binary is curviate, and the source is on GitHub at github.com/curviate/curviate-cli. First useful command: curviate account list.

COMPANY · LEGAL

Privacy Policy

Redmer Holding GmbHLast updated July 25, 2026

Who we are

Curviate is operated by Redmer Holding GmbH ("Curviate", "we", "us"), a German GmbH registered at Amtsgericht Bonn, HRB 29957, registered address Hostertstraße 16, 53332 Bornheim, Germany. Full company details are on our Imprint. We haven't appointed a statutory Data Protection Officer, since our processing doesn't reach the scale or sensitivity that requires one. Privacy questions go to privacy@curviate.com.

The two roles we play

When you create an account and use Curviate, we process your own data (identity, billing, API keys, connector authorizations). For that data, we are the controller.

When you use Curviate to act on your own connected LinkedIn account, viewing profiles, sending messages, managing engagement, that content and those contacts belong to that account and its people. You are the controller of that data; we are the processor, acting only on your instructions, under the Data Processing Agreement between us. If one of your contacts has a question about being reached through Curviate, you're who they should contact first; email privacy@curviate.com if you need help routing it.

What we collect, and why

DataWhy
Account identity (name, email, sign-in method)Create and secure your account
Your LinkedIn credentialsOperate the actions you request
LinkedIn content returned by an API callFulfil that specific request, nothing more
API keys and connector (OAuth) authorizationsAuthenticate your API, CLI, MCP, or SDK requests
Billing detailsCharge you correctly and meet our tax obligations
Usage and security logsKeep the service reliable and abuse-free
Support messagesRespond to you
Website analytics, only if you opt inUnderstand how the site is used

We rely on our contract with you, our legitimate interest in running and securing the service, our legal obligations (tax law, for example), and, for analytics, your consent. We never sell your data or use it to train models.

Where it's processed, and who else touches it

Our infrastructure runs in the EU. Hosting: Railway. Database and auth: Supabase, Ireland. Email: Resend. Payments: Stripe. Network security: a DDoS-protection provider sits in front of our app and never sees or stores request content. LinkedIn connectivity: a third-party infrastructure provider that lets us execute LinkedIn actions on your behalf. Error tracking: Sentry, Frankfurt. Product analytics: PostHog, Frankfurt. Uptime monitoring: Better Stack.

We give the current, named list of every provider above, plus our Data Processing Agreement, to any customer who asks: security@curviate.com.

Outside the EU

All customer LinkedIn data, account data, and telemetry are processed and stored exclusively in EU regions of our sub-processors. A few providers we rely on (Stripe and Sentry, for example) are headquartered outside the EU/EEA; where that applies, it's covered by their own GDPR safeguards, typically the EU Standard Contractual Clauses.

How long we keep it

DataRetention
Account and workspace dataWhile your account is active
Closed accountRecoverable for 7 days, then deleted on day 8
LinkedIn credentialsUntil you disconnect that account
LinkedIn contentNot stored; any transient cache clears within 1 hour, never indexed, never used for training
API keysUntil you revoke or rotate them
Connector (OAuth) authorizationsAccess token ~1 hour; refresh token up to ~12 months, or until you revoke it, whichever comes first
Billing recordsAs required by German tax law, currently up to 10 years
LogsA short operational window; metadata only, never message content

The 12-month figure above is a server-side credential for a connected AI agent or app. It is not a cookie and doesn't touch your browser session; see Cookies below for that. You can see and revoke every connector from Authorized applications in your dashboard at any time.

Cookies

We keep cookies to a minimum, and ask before anything beyond the essentials runs.

Strictly necessary, no consent needed:

NamePurposeExpiry
cc_cookieRemembers your cookie choice12 months
curviate-themeRemembers light/dark mode (local storage, not a cookie)Persistent
sb-*-auth-tokenKeeps you signed inWhile active; cleared on sign-out

Analytics, only if you accept:

NamePurposeExpiry
_gaGoogle Analytics: distinguishes visitors2 years
_gidGoogle Analytics: distinguishes visitors24 hours
_ga_<container id>Google Analytics: persists session state2 years

No advertising cookies, ever. Accept and reject are equally easy, and you can change your mind any time via Cookie Preferences in the footer; we won't ask again for 12 months unless something material changes. Our LinkedIn connect flow and OAuth authorization screen never set anything beyond the essentials, so no banner appears there.

Connecting an AI agent or app

Curviate is built for AI agents and automated clients as much as for people. If you connect an app like Claude, or your own code, via an API key or an OAuth connector, it can act on your workspace within the access you gave it. What it does with anything it receives back, including what it sends to its own AI model, is between you and that provider; review its practices before connecting it. Review and revoke any connection any time from your dashboard.

Your rights

You can access, correct, delete, restrict, or object to your data, port it elsewhere, and withdraw consent at any time: email privacy@curviate.com. Closing your account starts the 7-day recoverable window above. We don't make automated decisions about you that have a legal or similarly significant effect. You can also complain to a supervisory authority; ours is the Landesbeauftragte für Datenschutz und Informationsfreiheit Nordrhein-Westfalen (LDI NRW), www.ldi.nrw.de, though you're free to complain to the one in your own country instead.

Keeping it secure

Credentials are encrypted and never logged, returned, or shared. LinkedIn actions run through native, humanized flows; full detail is on our Security & Compliance page. If a breach puts your rights at risk, we'll notify the authorities and you, as GDPR requires. Curviate isn't directed at, or offered to, anyone under 16.

Changes

We'll update this page when our practices change, and reset the cookie prompt if the change is material.

Contact