## Table of Contents

- [Private pages](#private-pages)
- [Extraction with non-sensitive headers PRO](#extraction-with-non-sensitive-headers-pro)
  - [CLI Microlink API example](#cli-microlink-api-example)
  - [cURL Microlink API example](#curl-microlink-api-example)
  - [JavaScript Microlink API example](#javascript-microlink-api-example)
  - [Python Microlink API example](#python-microlink-api-example)
  - [Ruby Microlink API example](#ruby-microlink-api-example)
  - [PHP Microlink API example](#php-microlink-api-example)
  - [Golang Microlink API example](#golang-microlink-api-example)
- [Extraction with sensitive credentials](#extraction-with-sensitive-credentials)
- [When private extraction still fails](#when-private-extraction-still-fails)

---

[](https://microlink.io/docs/api/getting-started/overview)

[API](https://microlink.io/docs/api/getting-started/overview)

[](https://microlink.io/docs/guides)

GUIDES

[](https://microlink.io/docs/mql/getting-started/overview)

MQL

[](https://microlink.io/docs/sdk/getting-started/overview)

SDK

[](https://microlink.io/docs/cards/getting-started/overview)

CARDS

## Private pages

If the target page changes based on cookies, authorization, locale, or geolocation, the extraction rules are only half the problem. You also need the request to reach the right page variant. The general patterns for headers, secrets, endpoint selection, and proxy are covered in [private pages patterns](https://microlink.io/docs/guides/common/private-pages).

This page shows the data-extraction-specific setup.

## Extraction with non-sensitive headers PRO

The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://example.com' URL with 'data', 'meta' & 'headers' API parameters:

### CLI Microlink API example

``` bash
microlink https://example.com&data.title.selector=h1&data.title.attr=text&headers.accept-language=en-US
```

### cURL Microlink API example

``` bash
curl -G "https://api.microlink.io" \
  -d "url=https://example.com" \
  -d "data.title.selector=h1" \
  -d "data.title.attr=text" \
  -d "meta=false" \
  -d "headers.accept-language=en-US"
```

### JavaScript Microlink API example

``` javascript
import mql from '@microlink/mql'

const { data } = await mql('https://example.com', {
  data: {
    title: {
      selector: "h1",
      attr: "text"
    }
  },
  meta: false,
  headers: {
    "accept-language": "en-US"
  }
})
```

### Python Microlink API example

``` python
import requests

url = "https://api.microlink.io/"

querystring = {
    "url": "https://example.com",
    "data.title.selector": "h1",
    "data.title.attr": "text",
    "meta": "false",
    "headers.accept-language": "en-US"
}

response = requests.get(url, params=querystring)

print(response.json())
```

### Ruby Microlink API example

``` ruby
require 'uri'
require 'net/http'

base_url = "https://api.microlink.io/"

params = {
  url: "https://example.com",
  data.title.selector: "h1",
  data.title.attr: "text",
  meta: "false",
  headers.accept-language: "en-US"
}

uri = URI(base_url)
uri.query = URI.encode_www_form(params)

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
response = http.request(request)

puts response.body
```

### PHP Microlink API example

``` php
<?php

$baseUrl = "https://api.microlink.io/";

$params = [
    "url" => "https://example.com",
    "data.title.selector" => "h1",
    "data.title.attr" => "text",
    "meta" => "false",
    "headers.accept-language" => "en-US"
];

$query = http_build_query($params);
$url = $baseUrl . '?' . $query;

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET"
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #: " . $err;
} else {
    echo $response;
}
```

### Golang Microlink API example

``` bash
package main

import (
    "fmt"
    "net/http"
    "net/url"
    "io"
)

func main() {
    baseURL := "https://api.microlink.io"

    u, err := url.Parse(baseURL)
    if err != nil {
        panic(err)
    }
    q := u.Query()
    q.Set("url", "https://example.com")
    q.Set("data.title.selector", "h1")
    q.Set("data.title.attr", "text")
    q.Set("meta", "false")
    q.Set("headers.accept-language", "en-US")
    u.RawQuery = q.Encode()

    req, err := http.NewRequest("GET", u.String(), nil)
    if err != nil {
        panic(err)
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(body))
}
```

``` javascript
import mql from '@microlink/mql'

const { data } = await mql('https://example.com', {

  data: {

    title: {

      selector: "h1",

      attr: "text"

    }

  },

  meta: false,

  headers: {

    "accept-language": "en-US"

  }

})
```

Use `headers` for public request shaping. For cookies or authorization tokens, use the `x-api-header-*` pattern described in [private pages patterns](https://microlink.io/docs/guides/common/private-pages).

## Extraction with sensitive credentials

``` bash
curl -G https://pro.microlink.io \

  -d url=https://example.com/private \

  -d data.title.selector=h1 \

  -d data.title.attr=text \

  -d meta=false \

  -H 'x-api-key: YOUR_API_TOKEN' \

  -H 'x-api-header-cookie: session=YOUR_SESSION_COOKIE'
```

## When private extraction still fails

If the target blocks headless traffic, geofences content, or rate-limits the origin, use [proxy](https://microlink.io/docs/api/parameters/proxy)

PRO

. If the API returns `EPROXYNEEDED`, that confirms it.

For other errors, continue with [troubleshooting](https://microlink.io/docs/guides/data-extraction/troubleshooting).

If extraction still fails after the auth setup is correct, continue with [troubleshooting](https://microlink.io/docs/guides/data-extraction/troubleshooting).