# Airtop

> Drive a real Chrome browser in the cloud from a workflow, using plain language instead of selectors: read a page, ask questions about it, extract structured data across paginated results, screenshot it, and click and type your way through it. Keep a browser signed in across steps with saved profiles, and hand a live view to a person when something needs a human.

App · AI Agents · 13 actions. Web page: https://docs.lodol.com/docs/integrations/airtop

## Actions

### Ask about a page

Open a page and answer a question about it in plain language: 'is this in stock?', 'who wrote this?', 'what does the pricing page say the top tier costs?'. No selectors, and the answer survives a redesign of the page.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Question (`prompt`, text, required): What you want to know about the page.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `answer` (text)
- `credits_used` (number)
- `issues` (list)
- `partial` (true/false)
- `status` (text)

**Example output**

```json
{
  "answer": "The page explains that this domain is for use in examples.",
  "credits_used": 1,
  "issues": [],
  "partial": false,
  "status": "success"
}
```

### Check a page condition

Ask whether something is true of the page and get back a yes or no a later step can branch on: 'is the order marked shipped?', 'is there a cookie banner?'. This one looks at the page as an image, so it costs far more than the other steps on a busy page; set a credit ceiling if you're unsure.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Condition (`condition`, text, required): What should be true, in plain words.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `condition_met` (true/false)
- `credits_used` (number)
- `issues` (list)
- `partial` (true/false)
- `reason` (text)
- `status` (text)

**Example output**

```json
{
  "condition_met": true,
  "credits_used": 1,
  "issues": [],
  "partial": false,
  "reason": "The page shows the order status as shipped.",
  "status": "success"
}
```

### Click something

Click something on the page, described in your own words rather than as a CSS selector: 'the Accept cookies button', 'the second result'. Slow: finding the element is itself an AI step and a click can take a few minutes.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- What to click (`element_description`, text, required): Describe it the way you'd describe it to a person.
- Wait for the next page (`wait_for_navigation`, true/false): Turn on when the click goes somewhere, so the next step sees the new page rather than the old one. Default: `false`.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `credits_used` (number)
- `detail` (text)
- `issues` (list)
- `partial` (true/false)
- `status` (text)

**Example output**

```json
{
  "credits_used": 0,
  "detail": "Click operation completed",
  "issues": [],
  "partial": false,
  "status": "success"
}
```

### Delete saved profiles

Delete saved browser profiles by name. A profile holds the cookies of a signed-in browser, so deleting one signs that account out of every future session that would have used it.

**Inputs**

- Profile names (`profile_names`, list, required): The profiles to delete.

**Outputs**

- `count` (number)
- `deleted` (true/false)
- `profile_names` (list)

**Example output**

```json
{
  "count": 1,
  "deleted": true,
  "profile_names": [
    "linkedin-login"
  ]
}
```

### End a browser session

Close a browser session so it stops billing. Give a profile name to keep whatever it's signed into, so a later run can start already signed in; the signed-in state is only saved when the session ends.

**Inputs**

- Browser session (`session_id`, text, required): From an earlier 'Start a browser session' step.
- Save signed-in state as (`save_profile_as`, text): A name to keep this browser's cookies and logins under, for 'Sign in as' on a later session. Leave blank to keep nothing.

**Outputs**

- `ended` (true/false)
- `profile_saved_as` (text)
- `session_id` (text)

**Example output**

```json
{
  "ended": true,
  "profile_saved_as": "",
  "session_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9"
}
```

### Extract data from a page

Pull structured records off a page (listings, search results, a table), following 'next page' links as it goes. Describe the shape you want and the result comes back ready for a later step to loop over.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- What to extract (`prompt`, text, required): Describe the records you want and the fields on each one.
- Result shape (`output_schema`, object): An optional JSON schema for the answer. Give one and the result comes back as data rather than text, so a later step can loop over it.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `answer` (text)
- `credits_used` (number)
- `data`
- `issues` (list)
- `partial` (true/false)
- `status` (text)

**Example output**

```json
{
  "answer": "{\"links\":[{\"text\":\"Learn more\",\"url\":\"https://iana.org\"}]}",
  "credits_used": 3,
  "data": {
    "links": [
      {
        "text": "Learn more",
        "url": "https://iana.org"
      }
    ]
  },
  "issues": [],
  "partial": false,
  "status": "success"
}
```

### List browser sessions

See the browser sessions on your Airtop account and how many minutes each has used. Worth running on a schedule: a session a failed workflow left behind keeps billing until it goes idle, and this is what shows it.

**Inputs**

- Which sessions (`status`, text): Narrow it to sessions in one state. One of: `all` (All sessions), `running` (Running now), `initializing` (Starting up), `awaitingCapacity` (Waiting for capacity), `ended`, `completed`, `cancelled`. Default: `all`.
- How many (`limit`, number): The most sessions to return, newest first. At least 1. Default: `10`.

**Outputs**

- `count` (number)
- `has_more` (true/false)
- `running_count` (number)
- `sessions` (list)
- `total` (number)

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "running_count": 1,
  "sessions": [
    {
      "created_at": "2026-09-17T22:19:59.935Z",
      "idle_timeout_minutes": 5,
      "last_activity": "2026-09-17T22:19:59.935Z",
      "minutes_used": null,
      "profile_name": null,
      "session_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
      "status": "running"
    }
  ],
  "total": 1
}
```

### Open a page

Open another tab in a browser session that's already running, and get back a link for watching or driving it yourself.

**Inputs**

- Browser session (`session_id`, text, required): From an earlier 'Start a browser session' step.
- Page address (`url`, text, required): The page to open.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.

**Outputs**

- `live_view_url` (text)
- `session_id` (text)
- `url` (text)
- `window_id` (text)

**Example output**

```json
{
  "live_view_url": "https://live.airtop.ai/0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9?token=...",
  "session_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
  "url": "https://example.com",
  "window_id": "2c3d4e5f-6071-8293-a4b5-c6d7e8f9a0b1"
}
```

### Read a page

Open a page in a real Chrome browser and return its text, with the navigation and scripts stripped out. No AI is involved and it costs no Airtop credits, so use it when a later step is going to do the thinking.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.

**Outputs**

- `content_type` (text)
- `credits_used` (number)
- `issues` (list)
- `partial` (true/false)
- `selected_text` (text)
- `status` (text)
- `text` (text)
- `title` (text)

**Example output**

```json
{
  "content_type": "text/plain",
  "credits_used": 0,
  "issues": [],
  "partial": false,
  "selected_text": "",
  "status": "success",
  "text": "Example Domain\n\nThis domain is for use in examples.",
  "title": "Example Domain"
}
```

### Start a browser session

Open a cloud browser that stays open across steps, and wait until it's ready. Use it when several steps work on the same site, or when you need to be signed in. Always pair it with an 'End a browser session' step; a browser left open bills until it goes idle.

**Inputs**

- Starting page (`url`, text): Open this page straight away. Leave blank to start with a blank tab.
- Sign in as (`profile_name`, text): The name of a saved Airtop profile to load, so the browser starts already signed in. Create one by signing in through a live view and saving it when the session ends.
- Close after idle for (`idle_timeout_minutes`, number): Minutes of inactivity before Airtop closes the browser by itself. This is the backstop that stops a failed workflow billing forever, so keep it short. From 1 to 1440. Default: `5`.
- Solve CAPTCHAs (`solve_captcha`, true/false): Let Airtop work through CAPTCHA challenges itself. Default: `false`.
- Use a residential proxy (`use_proxy`, true/false): Browse through Airtop's residential proxy, for sites that block data-centre traffic. Default: `false`.

**Outputs**

- `created_at` (text)
- `idle_timeout_minutes` (number)
- `last_activity` (text)
- `live_view_url` (text)
- `minutes_used` (number)
- `profile_name` (text)
- `session_id` (text)
- `status` (text)
- `window_id` (text)

**Example output**

```json
{
  "created_at": "2026-09-17T22:19:59.935Z",
  "idle_timeout_minutes": 5,
  "last_activity": "2026-09-17T22:19:59.935Z",
  "live_view_url": "https://live.airtop.ai/0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9?token=...",
  "minutes_used": null,
  "profile_name": null,
  "session_id": "0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
  "status": "running",
  "window_id": "1b2c3d4e-5f60-7182-93a4-b5c6d7e8f9a0"
}
```

### Summarize a page

Open a page and summarize it. Add a prompt to steer what the summary is about (the pricing, the risks, what changed), rather than a general precis.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Focus on (`prompt`, text): What the summary should be about. Leave blank for a general summary.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `credits_used` (number)
- `issues` (list)
- `partial` (true/false)
- `status` (text)
- `summary` (text)

**Example output**

```json
{
  "credits_used": 1,
  "issues": [],
  "partial": false,
  "status": "success",
  "summary": "The page describes a domain reserved for examples."
}
```

### Take a screenshot

Open a page and take a picture of it. Comes back as an image you can attach to an email or a message. Costs no Airtop credits.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.

**Outputs**

- `credits_used` (number)
- `expires_at` (text)
- `image` (text)
- `image_format` (text)
- `issues` (list)
- `partial` (true/false)
- `status` (text)

**Example output**

```json
{
  "credits_used": 0,
  "expires_at": "",
  "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...",
  "image_format": "base64",
  "issues": [],
  "partial": false,
  "status": "success"
}
```

### Type text

Type into a field described in your own words: 'the search box', 'the email field'. Airtop reports the keystrokes as sent, which isn't the same as the page acting on them, so turn on 'Press Enter' to submit.

**Inputs**

- Page address (`url`, text): The page to work on. Leave this blank and fill in the session and window below to use a browser an earlier step already opened; that's how you reach a page behind a login.
- Text to type (`text`, text, required): What to put in the field.
- Where to type (`element_description`, text): Describe the field. Leave blank to type wherever the page already has the cursor.
- Clear the field first (`clear_first`, true/false): Empty the field before typing into it. Default: `false`.
- Press Enter afterwards (`press_enter`, true/false): Submit the form, or run the search. Default: `false`.
- Wait for the next page (`wait_for_navigation`, true/false): Turn on when pressing Enter goes somewhere, so the next step sees the new page. Default: `false`.
- Browser session (`session_id`, text): Use a browser an earlier 'Start a browser session' step opened, instead of opening a new one. Leave blank to just use the address above.
- Browser tab (`window_id`, text): The tab from that same step. Needed whenever a browser session is given.
- Consider the page loaded (`wait_until`, text): How long to wait after opening the address before acting. Only applies when this step opens the page. One of: `load` (When the page and its images have loaded), `domContentLoaded` (As soon as the HTML is ready (fastest)), `complete` (When the page and everything embedded in it have loaded), `noWait` (Don't wait at all). Default: `load`.
- Stop after (credits) (`max_credits`, number): Give up if the step has spent more than this many Airtop credits. Airtop checks between steps of the work, so it can overshoot a little. At least 1.
- Stop after (seconds) (`max_seconds`, number): Give up if the step has been running longer than this. Browser steps are slow (a click can take minutes), so leave this generous. At least 1.

**Outputs**

- `credits_used` (number)
- `detail` (text)
- `issues` (list)
- `partial` (true/false)
- `status` (text)

**Example output**

```json
{
  "credits_used": 0,
  "detail": "Type operation completed",
  "issues": [],
  "partial": false,
  "status": "success"
}
```
