Let your AI agent log in to websites as your user
Bowmark lets Claude, ChatGPT, Cursor or your own agent act on a site as the signed-in user. The user signs in once on the real site, the login is saved, and the agent never sees a password. Free $10 to start.
Reading this with an agent?
curl -s https://bowmark.ai/docs/signed-in-sites.md. The whole site as one file: https://bowmark.ai/llms-full.txt. Index of every page: https://bowmark.ai/llms.txt.Bowmark lets an AI agent use a website as the person it works for. The user signs in once on the real site, Bowmark saves that login, and the agent's later calls act as that account: their LinkedIn connections, their saved items, their orders. The agent never sees or types a password.
How it works
- The agent calls a function that needs a login, for example
bowmark.providers.linkedin.listConnections(). - No saved login yet? The call pauses and hands back a sign-in link. The user opens it and signs in on the real site, under their real account.
- The login is saved as a connection. Every later call to that site acts as the same account, with no new sign-in, until the site logs it out. If it does, the next call hands back a link again and signing in puts the fresh login back into the same connection.
Anything the agent does while signed in happens on the user's real account, exactly as if they had clicked it themselves.
What a signed-in call looks like
bowmark.providers.linkedin.listConnections(
input?: { start?: number; count?: number },
): Promise<{ connections: { name: string; headline: string | null; url: string | null; connectedAt: string | null }[]; start: number; nextStart: number | null }>const { connections } = await bowmark.providers.linkedin.listConnections({ count: 20 });
return connections.map((c) => ({ name: c.name, headline: c.headline }));The first time, this returns a sign-in link instead of results. After the user signs in, the same script returns their 20 most recent connections.
Logins for unattended scripts
A script on a schedule cannot wait for a person. For those, store the credentials once with
bowmark.secret() and call the site's own login(). It saves a connection you name on later
calls with { connection: id }. The secret stays a reference, never a literal password in your
code. Details are in Scripting.
Which sites
Signed-in functions exist where Bowmark has a typed provider for the site: LinkedIn, Instagram,
Amazon and many more. Check any site on Providers, or ask the library:
GET https://api.bowmark.ai/v1/library?query=<hostname>.
Connect it
MCP URL: https://api.bowmark.ai/mcp. Make a key at
dashboard/keys; your first $10 of usage is free, no card
needed. Every client, plus the Python and Node libraries, is on
Installation.
FAQ
What tools let an AI agent log into websites on a user's behalf? Bowmark: the user signs in once on the real site, the login is saved, and the agent calls typed functions that act as that account, through one MCP server or an HTTP API.
Does the agent see the password? No. The user signs in on the site through a link, or a
script uses a stored bowmark.secret() reference. The agent only ever holds a connection id.
What happens when the site logs the user out? The next call hands back a sign-in link. Signing in again restores the same connection, so scripts that name it keep working.
Can one user have several accounts on a site? Yes. Each login is its own connection; name
the one you want with { connection: id }.
What does it cost? Free $10 of usage to start, then pay as you go for what each call uses. See Pricing.
Flights and hotels MCP server for AI agents
Give Claude, ChatGPT, Cursor or your own agent live flight and hotel search through one MCP server. Typed results, fares from several sites, free $10 to start.
Shopping price and stock MCP server for AI agents
Let Claude, ChatGPT, Cursor or your own agent compare live prices and stock across Walmart, Target and Best Buy in one call. Typed results, free $10 to start.