# Microlink

> Open any web page in a real browser on Microlink's servers and get what you need from it: the metadata a link preview shows, a screenshot, a PDF or a short video, its content as Markdown, text or HTML, values picked out with CSS selectors, its links, images and email addresses, its logo, video and audio, its embed code, the technologies it is built with, a Lighthouse audit, or what your own JavaScript returns. Works without an API key on Microlink's free plan, whose 25 requests a day are shared across Lodol; add a Pro key for requests of your own.

App · Utilities · 15 actions. Web page: https://docs.lodol.com/docs/integrations/microlink

## Actions

### Detect a website's technologies

Find out what a website is built with, such as its framework, hosting, CDN, analytics and payment tools, each with how sure the detection is and what kind of technology it is. Detection is by Wappalyzer.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `categories` (list): Every category among them, alphabetically, e.g. ['Analytics', 'CDN'].
- `count` (number): How many technologies were detected.
- `names` (list): Just the names, e.g. ['Vercel', 'React', 'Next.js'].
- `technologies` (list): Each technology detected, as Wappalyzer names it.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "categories": [
    "Analytics",
    "CDN",
    "JavaScript frameworks",
    "Miscellaneous",
    "PaaS",
    "Security",
    "Static site generator",
    "Web frameworks",
    "Web servers"
  ],
  "count": 8,
  "names": [
    "Amazon Web Services",
    "Vercel",
    "React",
    "Next.js",
    "Linkedin Insight Tag",
    "HSTS",
    "Amazon S3",
    "Webpack"
  ],
  "technologies": [
    {
      "categories": [
        "PaaS"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/Amazon%20Web%20Services.svg",
      "name": "Amazon Web Services",
      "website": "https://aws.amazon.com/"
    },
    {
      "categories": [
        "PaaS"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/vercel.svg",
      "name": "Vercel",
      "website": "https://vercel.com"
    },
    {
      "categories": [
        "JavaScript frameworks"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/React.svg",
      "name": "React",
      "website": "https://reactjs.org"
    },
    {
      "categories": [
        "JavaScript frameworks",
        "Web frameworks",
        "Web servers",
        "Static site generator"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/Next.js.svg",
      "name": "Next.js",
      "website": "https://nextjs.org"
    },
    {
      "categories": [
        "Analytics"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/Linkedin.svg",
      "name": "Linkedin Insight Tag",
      "website": "https://business.linkedin.com/marketing-solutions/insight-tag"
    },
    {
      "categories": [
        "Security"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/default.svg",
      "name": "HSTS",
      "website": "https://www.rfc-editor.org/rfc/rfc6797#section-6.1"
    },
    {
      "categories": [
        "CDN"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/Amazon%20S3.svg",
      "name": "Amazon S3",
      "website": "https://aws.amazon.com/s3/"
    },
    {
      "categories": [
        "Miscellaneous"
      ],
      "confidence": 100,
      "icon": "https://www.wappalyzer.com/images/icons/Webpack.svg",
      "name": "Webpack",
      "website": "https://webpack.js.org/"
    }
  ],
  "url": "https://vercel.com/"
}
```

### Extract data from a page

Pick values out of any page with CSS selectors, each under the name you give it, such as a product's name and price: its text, its link, or any attribute, from the first match or every match. A full Microlink rule can be given for anything more.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Fields (`fields`, object, required): Each value to extract, by the name to give it and the CSS selector that finds it, e.g. title: h1, price: .price. For more, give a Microlink rule as JSON instead of a selector, e.g. {"selectorAll": "a", "attr": "href", "type": "url"}. Up to 50.
- Read (`attribute`, text): What to read from the elements a selector finds. Its text by default. A rule given as JSON says its own. One of: `text` (Its text), `html` (Its HTML), `markdown` (Its content as Markdown), `href` (Its link (href)), `src` (Its source (src), for an image or video), `content` (Its content attribute, for a meta tag), `val` (Its current value, for a form field). Default: `text`.
- Every match (`all_matches`, true/false): Get a list of every element each selector finds, instead of the first one. Default: `false`.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `data` (object): Each field by the name it was given, e.g. {'name': 'Walnut desk', 'price': '$249'}. A field whose selector matched nothing is null, or [] when it takes every match.
- `found` (number): How many fields found something.
- `missing` (list): The names of the fields that found nothing.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "data": {
    "heading": "Herman Melville - Moby-Dick",
    "sidebar": null
  },
  "found": 1,
  "missing": [
    "sidebar"
  ],
  "url": "https://httpbin.org/html"
}
```

### Find email addresses on a page

Find every email address written on a page, in its links or its text, once each, from the whole page or one part of it such as its footer. Addresses disguised as 'name [at] domain' or drawn as pictures are not found.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Only this part (`selector`, text): Optional. A CSS selector for the part to search, e.g. 'footer'. The whole page by default.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `count` (number): How many email addresses there are.
- `emails` (list): Each email address found, once each, e.g. ['hello@microlink.io']. Placeholders written on the page, such as 'you@domain.com' in a form, are found too.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "count": 2,
  "emails": [
    "hello@microlink.io",
    "you@domain.com"
  ],
  "url": "https://microlink.io/"
}
```

### Generate a PDF of a page

Print any page to PDF in a real browser, on the paper size, orientation, margins and scale you choose, all pages or a range of them, styled for print or as it looks on screen. Returns a public link and saves the PDF as a file.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Paper size (`paper_size`, text): A4 by default. One of: `Letter` (Letter (8.5 x 11 in)), `Legal` (Legal (8.5 x 14 in)), `Tabloid` (Tabloid (11 x 17 in)), `Ledger` (Ledger (17 x 11 in)), `A0`, `A1`, `A2`, `A3`, `A4` (A4 (8.27 x 11.7 in)), `A5`, `A6`. Default: `A4`.
- Landscape (`landscape`, true/false): Print across the page rather than down it. Default: `false`.
- Margins (`margin`, text): Optional. The margin on every side, with its unit: e.g. 1cm, 10mm, 0.5in or 20px. 0.35cm by default.
- Scale (`scale`, number): Optional. How large to print the page, from 0.1 to 2. 0.6 by default; 1 is actual size. From 0.1 to 2.
- Pages (`page_ranges`, text): Optional. Which pages to keep, e.g. '1-5, 8, 11-13', or '5-' for page 5 to the end. All of them by default.
- Style (`media_type`, text): Print uses the site's print styles, as a browser's Print does. Screen keeps the page as it looks in the browser. One of: `print` (Print, as the site styles it for printing), `screen` (Screen, as it looks in a browser). Default: `print`.
- Print backgrounds (`print_background`, true/false): Include background colors and images. Default: `false`.
- Click first (`click`, text): Optional. A CSS selector of something to click before capturing, e.g. a cookie banner's accept button, '#accept-cookies'.
- Hide elements (`hide`, text): Optional. CSS selectors of things to hide, separated by commas, e.g. 'header, .chat-widget'.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Wait (seconds) (`wait_seconds`, number): Optional. Seconds to wait after the page loads, for animations or late content. Microlink stops at 30 seconds in all on the free plan. From 0 to 30.
- Save the PDF as a file (`save_as_file`, true/false): Save the PDF to Lodol, ready to attach to an email or upload in a later step. On by default, as Microlink's link lasts only while it keeps the answer (24 hours on the free plan). Turn it off when the link is all you need. Default: `true`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `content_type` (text): The saved file's type, e.g. image/png, or ''.
- `document_ref` (text): The saved file's document reference, or ''.
- `documents` (list): The saved file as a document. Empty when it was not saved.
- `file_size_bytes` (number): The saved file's size in bytes, or 0.
- `file_url` (text): A URL that serves the saved file, or ''.
- `page_url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.
- `saved_as_file` (true/false): True when the file was saved to Lodol, ready to attach to a later step. The file fields below are empty otherwise.
- `size` (number): Its size in bytes.
- `size_pretty` (text): Its size for people, e.g. '18 kB'.
- `url` (text): A public link to the PDF. Microlink hosts it for as long as it caches the answer, 24 hours on the free plan, so keep the saved file for anything later than that.

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_ref": "doc_0123456789abcdef0123456789abcdef",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_0123456789abcdef0123456789abcdef",
      "filename": "page-example.com.pdf",
      "size_bytes": 18042,
      "url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team"
    }
  ],
  "file_size_bytes": 18042,
  "file_url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team",
  "page_url": "https://example.com/",
  "saved_as_file": true,
  "size": 18042,
  "size_pretty": "18 kB",
  "url": "https://iad.microlink.io/mwjXedwrSnq0tbqLLD0LRvlEEZMKhwG2sjtp_KXR3yzXY6fVgbgwzEWBtiNHsQ5UTBUoJ6_pNyh4UYF66wfCrg.pdf"
}
```

### Get a page's content

Get the content of any page as Markdown, plain text or HTML, the whole page or one part of it picked by a CSS selector. Markdown keeps headings, links, lists and tables, which suits an AI step. Also reads PDFs and Word, Excel and PowerPoint files by their address.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Format (`format`, text): Markdown by default. One of: `markdown`, `text` (Plain text), `html`. Default: `markdown`.
- Only this part (`selector`, text): Optional. A CSS selector for the part to read, e.g. 'article' or 'main', leaving out menus and footers. The whole page by default.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `characters` (number): How many characters it has.
- `content` (text): The page's content in that format, or ''. Markdown keeps headings, links, lists and tables, which suits an AI step.
- `format` (text): The format it is in: 'markdown', 'text' or 'html'.
- `found` (true/false): False when there was nothing to read, such as a CSS selector that matched nothing on the page.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "characters": 390,
  "content": "## Table of Contents\n\n- [Herman Melville - Moby-Dick](#herman-melville---moby-dick)\n\n---\n\n## Herman Melville - Moby-Dick\n\nAvailing himself of the mild, summer-cool weather that now reigned in these latitudes, and in preparation for the peculiarly active pursuits shortly to be anticipated, Perth, the begrimed, blistered old blacksmith, had not removed his portable forge to the hold again.",
  "format": "markdown",
  "found": true,
  "url": "https://httpbin.org/html"
}
```

### Get a page's metadata

Get what a link preview shows for any page: its title, description, picture, logo, author, publisher, date and language, gathered from its Open Graph, Twitter and JSON-LD tags and its HTML, with the HTTP status it answered and any redirects. Optionally with each picture's colors.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Include colors (`include_colors`, true/false): Also get each picture's colors: its palette, and a background and a text color that read well together, e.g. for a card in the site's colors. Default: `false`.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `author` (text): Who wrote it, when the page says, or ''.
- `date` (text): When it was published, in ISO 8601, e.g. '2026-09-22T09:33:36.000Z', or '' when the page gives no date.
- `description` (text): The description the page gives itself, or ''.
- `has_image` (true/false): True when the page names a picture that represents it.
- `has_logo` (true/false): True when a logo was found for the site.
- `image` (object): The picture that represents the page, as a link preview shows it (its Open Graph image, say).
- `lang` (text): Its language as a two-letter code, e.g. 'en', or ''.
- `logo` (object): The site's logo.
- `publisher` (text): The site's name, e.g. 'GitHub', or ''.
- `redirects` (list): Each redirect followed on the way to the page, in order. Empty when there were none.
- `status_code` (number): The HTTP status the page answered with, e.g. 200. A page that answers 404 is still read, so check it: its metadata is then the error page's.
- `title` (text): The page's title, e.g. 'microlink.io', or '' when it has none.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "author": "",
  "date": "",
  "description": "Browser as API. microlink.io has 61 repositories available. Follow their code on GitHub.",
  "has_image": true,
  "has_logo": true,
  "image": {
    "alternative_color": "",
    "background_color": "",
    "color": "",
    "height": 280,
    "palette": [],
    "size": 4924,
    "size_pretty": "4.92 kB",
    "type": "jpg",
    "url": "https://avatars.githubusercontent.com/u/29799436?s=280&v=4",
    "width": 280
  },
  "lang": "en",
  "logo": {
    "alternative_color": "",
    "background_color": "",
    "color": "",
    "height": 180,
    "palette": [],
    "size": 21128,
    "size_pretty": "21.1 kB",
    "type": "png",
    "url": "https://github.githubassets.com/assets/apple-touch-icon-180x180-a80b8e11abe2.png",
    "width": 180
  },
  "publisher": "GitHub",
  "redirects": [],
  "status_code": 200,
  "title": "microlink.io",
  "url": "https://github.com/microlinkhq"
}
```

### Get a page's video and audio

Get the main video and audio of a page as direct links a player or a download can use, with their length, size and format. Works for pages and links that serve a media file; YouTube and Vimeo videos need Microlink's Pro plan.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `audio` (object): The page's main audio.
- `has_audio` (true/false): True when audio was found.
- `has_video` (true/false): True when a video was found.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.
- `video` (object): The page's main video.

**Example output**

```json
{
  "audio": {
    "duration_pretty": "",
    "duration_seconds": 0.0,
    "height": 0,
    "size": 0,
    "size_pretty": "",
    "type": "",
    "url": "",
    "width": 0
  },
  "has_audio": false,
  "has_video": true,
  "url": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "video": {
    "duration_pretty": "5s",
    "duration_seconds": 5.0,
    "height": 540,
    "size": 1128375,
    "size_pretty": "1.13 MB",
    "type": "mp4",
    "url": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "width": 960
  }
}
```

### Get a website's logo

Get the logo of the site a page belongs to: the icon it declares for itself, such as its Apple touch icon, or the one Microlink finds when it declares none. Returns a link to it, its size and type, optionally its colors, and the logo as a file to attach if you need one.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Include colors (`include_colors`, true/false): Also get each picture's colors: its palette, and a background and a text color that read well together, e.g. for a card in the site's colors. Default: `false`.
- Save the logo as a file (`save_as_file`, true/false): Off by default, because the link is all an email, a chat message or a web page needs. Turn it on when a later step needs the logo as a file: attaching it, uploading it or posting it. Default: `false`.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `content_type` (text): The saved file's type, e.g. image/png, or ''.
- `document_ref` (text): The saved file's document reference, or ''.
- `documents` (list): The saved file as a document. Empty when it was not saved.
- `file_size_bytes` (number): The saved file's size in bytes, or 0.
- `file_url` (text): A URL that serves the saved file, or ''.
- `has_logo` (true/false): True when a logo was found for the site.
- `logo` (object): The site's logo: the icon it declares for itself (its Apple touch icon, else a favicon it declares), or the logo Microlink finds when it declares none. Every field is empty when none was found.
- `saved_as_file` (true/false): True when the file was saved to Lodol, ready to attach to a later step. The file fields below are empty otherwise.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "content_type": "",
  "document_ref": "",
  "documents": [],
  "file_size_bytes": 0,
  "file_url": "",
  "has_logo": true,
  "logo": {
    "alternative_color": "#E9E6FF",
    "background_color": "#543CFC",
    "color": "#010005",
    "height": 180,
    "palette": [
      "#543CFC",
      "#DEDAFC",
      "#4C33FB",
      "#3D0AFC",
      "#A49CFC",
      "#9189FC"
    ],
    "size": 3143,
    "size_pretty": "3.14 kB",
    "type": "png",
    "url": "https://images.stripeassets.com/fzn2n1nzq965/4vVgZi0ZMoEzOhkcv7EVwK/8cce6fdcf2733b2ec8e99548908847ed/favicon.png?w=180&h=180",
    "width": 180
  },
  "saved_as_file": false,
  "url": "https://stripe.com"
}
```

### Get embed code

Get the site's own embed HTML for a video, post, track or document, from YouTube, Vimeo, X, Spotify, TikTok, CodePen and hundreds of other sites that offer one (oEmbed), sized to fit if you like.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Maximum width (`max_width`, number): Optional. The widest the embed may be, in pixels. Each site decides whether to honour it. From 50 to 4000.
- Maximum height (`max_height`, number): Optional. The tallest the embed may be, in pixels. From 50 to 4000.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `has_embed` (true/false): False when the site offers no embed for the page. Sites that do include YouTube, Vimeo, X, Spotify, TikTok and hundreds more.
- `html` (text): The site's own embed HTML, e.g. '<iframe width="200" height="113" src="https://www.youtube.com/embed/9P6rdqiybaw?feature=oembed" ...></iframe>', or ''.
- `scripts` (list): Scripts the HTML needs, such as X's widgets.js. Empty for an iframe, which needs none.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "has_embed": true,
  "html": "<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/9P6rdqiybaw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen title=\"Wormholes Explained \u2013 Breaking Spacetime\"></iframe>",
  "scripts": [],
  "url": "https://www.youtube.com/watch?v=9P6rdqiybaw&app=desktop"
}
```

### Get the images on a page

Get every image on a page as a full address, once each, in page order, from the whole page or one part of it. Images a page loads late can be read from their own attribute.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Images matching (`selector`, text): Optional. A CSS selector for the images to take, e.g. 'article img'. Every <img> on the page by default.
- Address attribute (`attribute`, text): Optional. The attribute holding each image's address. src by default; a gallery that loads late often keeps it in data-src.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `count` (number): How many images there are.
- `images` (list): Each image as a full address, once each, in page order, e.g. ['https://cdn.microlink.io/logo/logo.svg'].
- `skipped_embedded` (number): How many images were embedded in the page as data: URIs, which are not links and are left out.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "count": 2,
  "images": [
    "https://cdn.microlink.io/logo/logo.svg",
    "https://iad.microlink.io/PQVxwViz_KtUqCuOXuFazHffjOsbysAboiXzLHAFjz5ijiOsepjPvQAfQGFQZkc7N1Y-wV8qbojMKsVAbIfvZg.png"
  ],
  "skipped_embedded": 1,
  "url": "https://microlink.io/"
}
```

### Get the links on a page

Get every link on a page as a full address, once each, in page order: all of them, only those to the same site, or only those to other sites, from the whole page or one part of it.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Which links (`which`, text): Every link by default. This site means the page's own host, with or without www; a subdomain counts as another site. One of: `all` (Every link), `same_site` (Only links to this site), `other_sites` (Only links to other sites). Default: `all`.
- Links matching (`selector`, text): Optional. A CSS selector for the links to take, e.g. 'nav a' or 'article a'. Every <a> on the page by default.
- Open in a browser (`render`, text): Whether Microlink runs the page's JavaScript in a browser before reading it. Let Microlink decide, unless a page that builds itself with JavaScript comes back empty (Always), or a plain page should be read faster (Never). One of: `auto` (Let Microlink decide (recommended)), `always` (Always, for pages that build themselves with JavaScript), `never` (Never, which is faster for plain pages). Default: `auto`.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `count` (number): How many links there are.
- `links` (list): Each link as a full address, once each, in page order, e.g. ['https://microlink.io/pricing', 'https://cal.com/microlink/15min']. mailto: and javascript: links are left out.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.

**Example output**

```json
{
  "count": 8,
  "links": [
    "https://microlink.io/#main-content",
    "https://microlink.io/",
    "https://microlink.io/tools",
    "https://microlink.io/docs/api/getting-started/overview",
    "https://microlink.io/pricing",
    "https://cal.com/microlink/15min",
    "https://dashboard.microlink.io/login",
    "https://microlink.io/api"
  ],
  "url": "https://microlink.io/"
}
```

### Record a video of a page

Record a short video of a page, up to 10 seconds, as it loads and plays its animations, as MP4 or WebM. Returns a public link and saves the video as a file.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Length (seconds) (`duration_seconds`, number): How long to record, from 1 to 10 seconds. 5 by default. The recording starts as the page starts loading. From 1 to 10. Default: `5`.
- Frame rate (`frame_rate`, text): Frames per second. 30 by default. One of: `15` (15 fps), `30` (30 fps), `60` (60 fps). Default: `30`.
- Video format (`format`, text): MP4 by default, which plays almost everywhere. One of: `mp4` (MP4 (H.264)), `webm` (WebM (VP9)). Default: `mp4`.
- Device (`device`, text): The device to look like: its screen size, pixel density and browser. Macbook Pro 13 by default. One of: `Macbook Pro 13`, `Macbook Pro 15`, `Macbook Pro 16`, `iMac 21`, `iMac 21 4K`, `iMac 24 4.5K`, `iMac 27`, `iMac 27 5K`, `iPhone 15 Pro Max`, `iPhone 15 Pro`, and 28 more. Default: `Macbook Pro 13`.
- Color scheme (`color_scheme`, text): Show the page in light or dark mode, for sites that have both. One of: `no-preference` (The page's default), `light`, `dark`. Default: `no-preference`.
- Click first (`click`, text): Optional. A CSS selector of something to click before capturing, e.g. a cookie banner's accept button, '#accept-cookies'.
- Hide elements (`hide`, text): Optional. CSS selectors of things to hide, separated by commas, e.g. 'header, .chat-widget'.
- Block ads and cookie banners (`block_ads`, true/false): Leave out ads, trackers and cookie banners. On by default. Default: `true`.
- Save the video as a file (`save_as_file`, true/false): Save the video to Lodol, ready to attach to an email or upload in a later step. On by default, as Microlink's link lasts only while it keeps the answer (24 hours on the free plan). Turn it off when the link is all you need. Default: `true`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `content_type` (text): The saved file's type, e.g. image/png, or ''.
- `document_ref` (text): The saved file's document reference, or ''.
- `documents` (list): The saved file as a document. Empty when it was not saved.
- `duration_pretty` (text): How long it plays, for people, e.g. '5s'.
- `duration_seconds` (number): How long it plays, in seconds, e.g. 5.
- `file_size_bytes` (number): The saved file's size in bytes, or 0.
- `file_url` (text): A URL that serves the saved file, or ''.
- `frame_rate` (number): Its frames per second, e.g. 30.
- `height` (number): Its height in pixels, e.g. 800.
- `page_url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.
- `saved_as_file` (true/false): True when the file was saved to Lodol, ready to attach to a later step. The file fields below are empty otherwise.
- `size` (number): Its size in bytes.
- `size_pretty` (text): Its size for people, e.g. '159 kB'.
- `still_url` (text): A public link to a still screenshot of the page, taken with the recording.
- `type` (text): The video's format: 'mp4' or 'webm'.
- `url` (text): A public link to the video. Microlink hosts it for as long as it caches the answer, 24 hours on the free plan, so keep the saved file for anything later than that.
- `width` (number): Its width in pixels, e.g. 1280.

**Example output**

```json
{
  "content_type": "video/mp4",
  "document_ref": "doc_0123456789abcdef0123456789abcdef",
  "documents": [
    {
      "content_type": "video/mp4",
      "document_ref": "doc_0123456789abcdef0123456789abcdef",
      "filename": "recording-httpbin.org.mp4",
      "size_bytes": 159286,
      "url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team"
    }
  ],
  "duration_pretty": "2s",
  "duration_seconds": 2.0,
  "file_size_bytes": 159286,
  "file_url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team",
  "frame_rate": 15,
  "height": 800,
  "page_url": "https://httpbin.org/html",
  "saved_as_file": true,
  "size": 159286,
  "size_pretty": "159 kB",
  "still_url": "https://iad.microlink.io/QomPlxFy3c_dpOmPxA1ONkMC8lxjqKuvFX8rl7Bl65a_QPg3qjkYf1B5DD7yvc9z7i6qBiwtjUf5syDdwf6ZxA.png",
  "type": "mp4",
  "url": "https://iad.microlink.io/H2nNApZ1ki7wcuXEFBNhkzbC1nC9AahnXLPC3ftMLsDJYBvofgbN7Zi85OLObZ2vtd4RbydB_YXOZRLcbN7VXg.mp4",
  "width": 1280
}
```

### Run a Lighthouse audit

Audit a page with Google Lighthouse, on a phone or a desktop: its performance, accessibility, best practices, SEO and agentic browsing scores out of 100, its Core Web Vitals, and each audit that did not pass, worst first.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Categories (`categories`, list): Which categories to audit. All of them by default; fewer is faster. One or more of: `performance`, `accessibility`, `best-practices` (Best Practices), `seo`, `agentic-browsing` (Agentic Browsing).
- Audit as (`device`, text): Mobile, Lighthouse's default, emulates a mid-range phone on a slower network. Desktop audits a desktop browser. One of: `mobile` (Mobile (Lighthouse's default)), `desktop`. Default: `mobile`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `device` (text): What it was audited as: 'mobile' or 'desktop'.
- `failed_audits` (list): Each audit that did not pass, worst first, up to 100.
- `failed_count` (number): How many audits did not pass.
- `fetched_at` (text): When the page was audited, in ISO 8601.
- `lighthouse_version` (text): The Lighthouse version that ran, e.g. '13.5.0'.
- `metrics` (object): The Core Web Vitals and other speed measures, when Performance was run.
- `scores` (object): Each category's score out of 100, as Lighthouse reports it.
- `url` (text): The page audited, after any redirects.
- `warnings` (list): Anything Lighthouse warned about while running.

**Example output**

```json
{
  "device": "mobile",
  "failed_audits": [
    {
      "category": "accessibility",
      "display_value": "",
      "id": "document-title",
      "score": 0,
      "title": "Document doesn't have a `<title>` element"
    },
    {
      "category": "accessibility",
      "display_value": "",
      "id": "html-has-lang",
      "score": 0,
      "title": "`<html>` element does not have a `[lang]` attribute"
    },
    {
      "category": "accessibility",
      "display_value": "",
      "id": "landmark-one-main",
      "score": 0,
      "title": "Document does not have a main landmark."
    },
    {
      "category": "best-practices",
      "display_value": "",
      "id": "errors-in-console",
      "score": 0,
      "title": "Browser errors were logged to the console"
    },
    {
      "category": "seo",
      "display_value": "",
      "id": "document-title",
      "score": 0,
      "title": "Document doesn't have a `<title>` element"
    },
    {
      "category": "seo",
      "display_value": "",
      "id": "meta-description",
      "score": 0,
      "title": "Document does not have a meta description"
    },
    {
      "category": "agentic-browsing",
      "display_value": "",
      "id": "agent-accessibility-tree",
      "score": 0,
      "title": "Accessibility tree is not well-formed"
    },
    {
      "category": "performance",
      "display_value": "Est savings of 2 KiB",
      "id": "document-latency-insight",
      "score": 50,
      "title": "Document request latency"
    },
    {
      "category": "performance",
      "display_value": "",
      "id": "viewport-insight",
      "score": 50,
      "title": "Optimize viewport for mobile"
    },
    {
      "category": "performance",
      "display_value": "140 ms",
      "id": "max-potential-fid",
      "score": 86,
      "title": "Max Potential First Input Delay"
    }
  ],
  "failed_count": 10,
  "fetched_at": "2026-09-29T22:27:13.280Z",
  "lighthouse_version": "13.5.0",
  "metrics": {
    "cumulative_layout_shift": {
      "display_value": "0",
      "score": 100,
      "unit": "unitless",
      "value": 0.0
    },
    "first_contentful_paint": {
      "display_value": "0.8 s",
      "score": 100,
      "unit": "millisecond",
      "value": 755.6555
    },
    "largest_contentful_paint": {
      "display_value": "0.8 s",
      "score": 100,
      "unit": "millisecond",
      "value": 755.6555
    },
    "speed_index": {
      "display_value": "0.8 s",
      "score": 100,
      "unit": "millisecond",
      "value": 755.6555
    },
    "time_to_interactive": {
      "display_value": "0.9 s",
      "score": 100,
      "unit": "millisecond",
      "value": 896.7555
    },
    "total_blocking_time": {
      "display_value": "90 ms",
      "score": 99,
      "unit": "millisecond",
      "value": 91.0
    }
  },
  "scores": {
    "accessibility": 54,
    "agentic_browsing": 50,
    "best_practices": 96,
    "performance": 100,
    "seo": 82
  },
  "url": "https://httpbin.org/html",
  "warnings": []
}
```

### Run JavaScript on a page

Open a page in a browser on Microlink's servers and run your own JavaScript function against it, with Puppeteer's page to click, type, wait and read, and get back what it returns and what it logged. On the free plan code can be up to 1,024 bytes and run for 15 seconds.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Function (`code`, text, required): A JavaScript function that receives { page, url } and returns a value, e.g. ({ page }) => page.title(). The page is Puppeteer's, already at the address, and page.evaluate runs code in the page itself.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `duration_ms` (number): How long it took to run, in milliseconds.
- `logs` (list): What the function wrote to the console, in order.
- `url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.
- `value` (text): What the function returned, of any JSON type, e.g. 'GitHub' or {'links': 42, 'images': 7}.

**Example output**

```json
{
  "duration_ms": 319,
  "logs": [],
  "url": "https://httpbin.org/html",
  "value": {
    "h1": "Herman Melville - Moby-Dick",
    "paragraphs": 1
  }
}
```

### Take a screenshot

Take a screenshot of any page in a real browser: the visible part or the whole page, or one element of it, as PNG or JPEG, on a phone, tablet or desktop, in light or dark mode, optionally framed in a browser window. Clicks, waits and hidden elements prepare the page first. Returns a public link and saves the image as a file.

**Inputs**

- Page (`url`, text, required): The page to open, e.g. https://github.com/microlinkhq. An address without http:// or https:// is opened as https.
- Full page (`full_page`, true/false): Capture the whole page from top to bottom, not just what fits on the screen. Default: `false`.
- Image format (`format`, text): PNG by default. JPEG makes a smaller file. One of: `png`, `jpeg` (JPEG (smaller file)). Default: `png`.
- JPEG quality (`quality`, number): Optional. From 1 to 100, for a JPEG only: lower is a smaller file with more blur. 80 by default. From 1 to 100.
- Only this element (`element`, text): Optional. A CSS selector to capture just one part of the page, e.g. '#pricing' or 'main'. Microlink waits for it to appear.
- Device (`device`, text): The device to look like: its screen size, pixel density and browser. Macbook Pro 13 by default. One of: `Macbook Pro 13`, `Macbook Pro 15`, `Macbook Pro 16`, `iMac 21`, `iMac 21 4K`, `iMac 24 4.5K`, `iMac 27`, `iMac 27 5K`, `iPhone 15 Pro Max`, `iPhone 15 Pro`, and 28 more. Default: `Macbook Pro 13`.
- Color scheme (`color_scheme`, text): Show the page in light or dark mode, for sites that have both. One of: `no-preference` (The page's default), `light`, `dark`. Default: `no-preference`.
- Browser frame (`frame`, text): Show the screenshot inside a light or dark browser window, for a presentation or a social post. One of: `none` (No frame), `light` (Light browser window), `dark` (Dark browser window). Default: `none`.
- Frame background (`background`, text): Optional. What the browser frame sits on: a color ('#F76698'), a CSS gradient ('linear-gradient(225deg, #FF057C, #321575)') or a picture's address.
- Click first (`click`, text): Optional. A CSS selector of something to click before capturing, e.g. a cookie banner's accept button, '#accept-cookies'.
- Hide elements (`hide`, text): Optional. CSS selectors of things to hide, separated by commas, e.g. 'header, .chat-widget'.
- Wait for element (`wait_for_selector`, text): Optional. A CSS selector to wait for before going on, e.g. 'main' or '.price', for content that appears after the page loads.
- Wait (seconds) (`wait_seconds`, number): Optional. Seconds to wait after the page loads, for animations or late content. Microlink stops at 30 seconds in all on the free plan. From 0 to 30.
- Block ads and cookie banners (`block_ads`, true/false): Leave out ads, trackers and cookie banners. On by default. Default: `true`.
- Save the screenshot as a file (`save_as_file`, true/false): Save the screenshot to Lodol, ready to attach to an email or upload in a later step. On by default, as Microlink's link lasts only while it keeps the answer (24 hours on the free plan). Turn it off when the link is all you need. Default: `true`.
- Fetch a fresh copy (`skip_cache`, true/false): Microlink keeps each answer for 24 hours and hands it back for the same request. Turn this on to open the page again, e.g. to watch a price that changes. It is slower. Default: `false`.

**Outputs**

- `content_type` (text): The saved file's type, e.g. image/png, or ''.
- `document_ref` (text): The saved file's document reference, or ''.
- `documents` (list): The saved file as a document. Empty when it was not saved.
- `file_size_bytes` (number): The saved file's size in bytes, or 0.
- `file_url` (text): A URL that serves the saved file, or ''.
- `height` (number): Its height in pixels, e.g. 1600.
- `page_url` (text): The page's address after any redirects, as Microlink opened it, e.g. 'https://github.com/microlinkhq'.
- `saved_as_file` (true/false): True when the file was saved to Lodol, ready to attach to a later step. The file fields below are empty otherwise.
- `size` (number): Its size in bytes.
- `size_pretty` (text): Its size for people, e.g. '47.5 kB'.
- `type` (text): The image's format: 'png' or 'jpeg'.
- `url` (text): A public link to the screenshot, e.g. 'https://iad.microlink.io/wAhHg...png', for an email, a chat message or a web page. Microlink hosts it for as long as it caches the answer, 24 hours on the free plan, so keep the saved file for anything later than that.
- `width` (number): Its width in pixels, e.g. 2560: the browser's width times the device's pixel density, and more in a browser frame, as measured from the picture.

**Example output**

```json
{
  "content_type": "image/png",
  "document_ref": "doc_0123456789abcdef0123456789abcdef",
  "documents": [
    {
      "content_type": "image/png",
      "document_ref": "doc_0123456789abcdef0123456789abcdef",
      "filename": "screenshot-example.com.png",
      "size_bytes": 47548,
      "url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team"
    }
  ],
  "file_size_bytes": 47548,
  "file_url": "/actions/core/serve-document/doc_0123456789abcdef0123456789abcdef?teamId=team",
  "height": 1600,
  "page_url": "https://example.com/",
  "saved_as_file": true,
  "size": 47548,
  "size_pretty": "47.5 kB",
  "type": "png",
  "url": "https://iad.microlink.io/wAhHgoHpy9XkMWW-E1t0vMv0ToXJENm5_9MQSluK3y9KZjMu8qIiWgz9QSoAoo0LcHgq4Qg0h4Xak6sFd1Em_g.png",
  "width": 2560
}
```
