Choosing scope
Start with the smallest useful wrapper
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' API parameters:
CLI Microlink API example
microlink https://example.com&data.content.attr=markdowncURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://example.com" \
-d "data.content.attr=markdown" \
-d "meta=false"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://example.com', {
data: {
content: {
attr: "markdown"
}
},
meta: false
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://example.com",
"data.content.attr": "markdown",
"meta": "false"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://example.com",
data.content.attr: "markdown",
meta: "false"
}
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.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://example.com",
"data.content.attr" => "markdown",
"meta" => "false"
];
$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
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.content.attr", "markdown")
q.Set("meta", "false")
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))
}import mql from '@microlink/mql'
const { data } = await mql('https://example.com', {
data: {
content: {
attr: "markdown"
}
},
meta: false
})The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io/docs/api/getting-started/overview' URL with 'data' & 'meta' API parameters:
CLI Microlink API example
microlink https://microlink.io/docs/api/getting-started/overview&data.article.selector=main&data.article.attr=markdowncURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io/docs/api/getting-started/overview" \
-d "data.article.selector=main" \
-d "data.article.attr=markdown" \
-d "meta=false"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
article: {
selector: "main",
attr: "markdown"
}
},
meta: false
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io/docs/api/getting-started/overview",
"data.article.selector": "main",
"data.article.attr": "markdown",
"meta": "false"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io/docs/api/getting-started/overview",
data.article.selector: "main",
data.article.attr: "markdown",
meta: "false"
}
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.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io/docs/api/getting-started/overview",
"data.article.selector" => "main",
"data.article.attr" => "markdown",
"meta" => "false"
];
$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
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://microlink.io/docs/api/getting-started/overview")
q.Set("data.article.selector", "main")
q.Set("data.article.attr", "markdown")
q.Set("meta", "false")
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))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
article: {
selector: "main",
attr: "markdown"
}
},
meta: false
})main or article. It is usually more reliable than cleaning the full page after the fact.| If you need | Use |
|---|---|
| A quick draft of the entire page | Omit selector |
| Cleaner docs or article content | selector: 'main' or selector: 'article' |
| One specific block or panel | A more precise CSS selector |
Add supporting fields when markdown alone is not enough
The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io/docs/api/getting-started/overview' URL with 'data' & 'meta' API parameters:
CLI Microlink API example
microlink https://microlink.io/docs/api/getting-started/overview&data.title.selector='main h1'&data.title.attr=text&data.article.selector=main&data.article.attr=markdown&data.headings.selectorAll='main h2'&data.headings.attr=textcURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io/docs/api/getting-started/overview" \
-d "data.title.selector=main%20h1" \
-d "data.title.attr=text" \
-d "data.article.selector=main" \
-d "data.article.attr=markdown" \
-d "data.headings.selectorAll=main%20h2" \
-d "data.headings.attr=text" \
-d "meta=false"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
title: {
selector: "main h1",
attr: "text"
},
article: {
selector: "main",
attr: "markdown"
},
headings: {
selectorAll: "main h2",
attr: "text"
}
},
meta: false
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io/docs/api/getting-started/overview",
"data.title.selector": "main h1",
"data.title.attr": "text",
"data.article.selector": "main",
"data.article.attr": "markdown",
"data.headings.selectorAll": "main h2",
"data.headings.attr": "text",
"meta": "false"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io/docs/api/getting-started/overview",
data.title.selector: "main h1",
data.title.attr: "text",
data.article.selector: "main",
data.article.attr: "markdown",
data.headings.selectorAll: "main h2",
data.headings.attr: "text",
meta: "false"
}
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.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io/docs/api/getting-started/overview",
"data.title.selector" => "main h1",
"data.title.attr" => "text",
"data.article.selector" => "main",
"data.article.attr" => "markdown",
"data.headings.selectorAll" => "main h2",
"data.headings.attr" => "text",
"meta" => "false"
];
$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
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://microlink.io/docs/api/getting-started/overview")
q.Set("data.title.selector", "main h1")
q.Set("data.title.attr", "text")
q.Set("data.article.selector", "main")
q.Set("data.article.attr", "markdown")
q.Set("data.headings.selectorAll", "main h2")
q.Set("data.headings.attr", "text")
q.Set("meta", "false")
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))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
title: {
selector: "main h1",
attr: "text"
},
article: {
selector: "main",
attr: "markdown"
},
headings: {
selectorAll: "main h2",
attr: "text"
}
},
meta: false
})evaluate, jump to Data extraction: Defining rules.Prepare the page before conversion
The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io' URL with 'data', 'meta', 'waitUntil', 'waitForSelector', 'click' & 'styles' API parameters:
CLI Microlink API example
microlink https://microlink.io&data.content.selector=main&data.content.attr=markdown&waitUntil=domcontentloaded&waitForSelector=main&click=#features&styles='header, footer { display: none !important; }'cURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io" \
-d "data.content.selector=main" \
-d "data.content.attr=markdown" \
-d "meta=false" \
-d "waitUntil=domcontentloaded" \
-d "waitForSelector=main" \
-d "click=#features" \
-d "styles=header%2C%20footer%20%7B%20display%3A%20none%20!important%3B%20%7D"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
data: {
content: {
selector: "main",
attr: "markdown"
}
},
meta: false,
waitUntil: "domcontentloaded",
waitForSelector: "main",
click: "#features",
styles: [
"header, footer { display: none !important; }"
]
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io",
"data.content.selector": "main",
"data.content.attr": "markdown",
"meta": "false",
"waitUntil": "domcontentloaded",
"waitForSelector": "main",
"click": "#features",
"styles": "header, footer { display: none !important; }"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io",
data.content.selector: "main",
data.content.attr: "markdown",
meta: "false",
waitUntil: "domcontentloaded",
waitForSelector: "main",
click: "#features",
styles: "header, footer { display: none !important; }"
}
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.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io",
"data.content.selector" => "main",
"data.content.attr" => "markdown",
"meta" => "false",
"waitUntil" => "domcontentloaded",
"waitForSelector" => "main",
"click" => "#features",
"styles" => "header, footer { display: none !important; }"
];
$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
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://microlink.io")
q.Set("data.content.selector", "main")
q.Set("data.content.attr", "markdown")
q.Set("meta", "false")
q.Set("waitUntil", "domcontentloaded")
q.Set("waitForSelector", "main")
q.Set("click", "#features")
q.Set("styles", "header, footer { display: none !important; }")
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))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io', {
data: {
content: {
selector: "main",
attr: "markdown"
}
},
meta: false,
waitUntil: "domcontentloaded",
waitForSelector: "main",
click: "#features",
styles: [
"header, footer { display: none !important; }"
]
})- Better
selector waitForSelectorclickorscrollstyles
- Use
prerender: falsewhen the HTML already contains the content you need. - Use
prerender: truewhen a client-rendered page stays empty without a browser. - Prefer
waitForSelectoroverwaitForTimeout. - Keep
adblock: trueunless you explicitly need banners or ads in the output.
Use fallbacks when wrappers vary
The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://microlink.io/docs/api/getting-started/overview' URL with 'data' & 'meta' API parameters:
CLI Microlink API example
microlink https://microlink.io/docs/api/getting-started/overview&data.content='[object Object],[object Object],[object Object]'cURL Microlink API example
curl -G "https://api.microlink.io" \
-d "url=https://microlink.io/docs/api/getting-started/overview" \
-d "data.content=%5Bobject%20Object%5D%2C%5Bobject%20Object%5D%2C%5Bobject%20Object%5D" \
-d "meta=false"JavaScript Microlink API example
import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
content: [
{
selector: "article",
attr: "markdown"
},
{
selector: "main",
attr: "markdown"
},
{
attr: "markdown"
}
]
},
meta: false
})Python Microlink API example
import requests
url = "https://api.microlink.io/"
querystring = {
"url": "https://microlink.io/docs/api/getting-started/overview",
"data.content": "[object Object],[object Object],[object Object]",
"meta": "false"
}
response = requests.get(url, params=querystring)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://api.microlink.io/"
params = {
url: "https://microlink.io/docs/api/getting-started/overview",
data.content: "[object Object],[object Object],[object Object]",
meta: "false"
}
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.bodyPHP Microlink API example
<?php
$baseUrl = "https://api.microlink.io/";
$params = [
"url" => "https://microlink.io/docs/api/getting-started/overview",
"data.content" => "[object Object],[object Object],[object Object]",
"meta" => "false"
];
$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
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://microlink.io/docs/api/getting-started/overview")
q.Set("data.content", "[object Object],[object Object],[object Object]")
q.Set("meta", "false")
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))
}import mql from '@microlink/mql'
const { data } = await mql('https://microlink.io/docs/api/getting-started/overview', {
data: {
content: [
{
selector: "article",
attr: "markdown"
},
{
selector: "main",
attr: "markdown"
},
{
attr: "markdown"
}
]
},
meta: false
})Fix the most common markdown problems
- Empty output: add
waitForSelector, then tryprerender: true. - Noisy output: tighten the
selectorbefore you reach for CSS cleanup. - Sticky headers, nav, or banners inside the result: use
click,scroll, orstylesbefore conversion. - Inconsistent wrappers across pages: use fallback rules instead of one fragile selector.
Use data extraction for the deeper dives
- nested objects or list-of-objects responses
- collections that carry several fields per item
- typed fields such as URLs, dates, images, or numbers
evaluatefor custom browser-side extraction logic- device, viewport, media type, or browser automation details
- timeout, auth, proxy, and advanced troubleshooting paths