# Automate a site in a browser

> Save a login once in a real browser, then have your agents work sites that have no API, like LinkedIn.

Some things have no API: a supplier portal, an internal tool, a site whose data isn't published anywhere else. For those, General Input gives your agents a real browser that is already signed in as you.

You sign in once, by hand, in a live browser window. The login is saved to a **browser profile**, and from then on any agent or workflow can open that profile and arrive already authenticated.

<Callout type="note">
  If you don't see **Browsers** in the sidebar, browser use isn't enabled for
  your workspace yet. Get in touch and we'll turn it on.
</Callout>

## When to reach for it

The browser is the last resort, not the first. An integration or a plain HTTP call beats it on speed, cost, and reliability every time, and browser time is billed by the second.

- **Use an integration** when the service is in our catalog. Check [Connect an integration](/getting-started/connect-an-integration) first.
- **Use the browser** when there is no API, the API doesn't expose what you need, or the data only exists behind a login.

## Create a browser

<Steps>
  <Step>Open **Browsers** from the sidebar and click **New browser**.</Step>
  <Step>
    Give it a name you'll recognize later, like `LinkedIn` or `Supplier
    portals`, and click **Create**.
  </Step>
</Steps>

A profile is a whole browser, not a single site. You can sign into as many sites as you like inside one profile, and agents reuse every login saved in it.

## Sign into LinkedIn

<Steps>
  <Step>
    Click **Connect** on the profile. A live browser opens in the page, streamed
    to you.
  </Step>
  <Step>
    Navigate to LinkedIn and sign in exactly as you normally would, including
    any two-factor prompt. You are typing into a real browser; nobody else sees
    it.
  </Step>
  <Step>
    Once you're through to the logged-in view, close the session. The cookies
    stay with the profile.
  </Step>
</Steps>

<Callout type="note">
  The sign-in window has a hard deadline shown as a countdown, and activity does
  not extend it. If it runs out mid-login, just connect again and pick up where
  you left off.
</Callout>

<Callout type="tip">
  Never give an agent your password. You sign in yourself, in this window, and
  the agent only ever gets the saved session. If a login expires later, the
  agent will tell you to reconnect rather than trying to sign in for you.
</Callout>

## Automate something on LinkedIn

With the login saved, describe the automation the same way you would any other. See [Build your first workflow](/getting-started/build-your-first-workflow) for the full walkthrough.

<Steps>
  <Step>
    Start a new workflow and describe the job, naming the site and the browser
    profile, for example: _"Every weekday at 8am, open LinkedIn with my LinkedIn
    browser, collect the new posts from my feed that mention hiring, and send me
    a Slack summary."_
  </Step>
  <Step>
    The author builds it, opening the profile so the run starts signed in. Run
    it once by hand and check the output.
  </Step>
  <Step>Add the schedule or trigger you want and enable it.</Step>
</Steps>

<Callout type="tip">
  Keep the browser step narrow. Getting the data out of the site and into a
  sheet, a Slack message, or your CRM is cheaper and more reliable done with an
  integration once the browser has handed the data over.
</Callout>

## Things worth knowing

- **One session at a time.** A profile is a single identity, so only one run can hold it at once. A second run waits or carries on without it.
- **Logins expire.** Sites sign you out eventually. When that happens the run stops and tells you to reconnect the profile — reconnect it the same way you set it up.
- **Billed by the second.** Browser runs cost more than API calls. Prefer a schedule that runs a few times a day over one that polls constantly.

## What's next

If the site you want does have an API but isn't in our catalog yet, [Connect a custom OAuth integration](/getting-started/connect-custom-oauth-integration) is usually the better path.