curl --request POST \
--url https://app.manypi.com/api/leads/web-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "marketing agencies in Austin",
"page": 0,
"country": "us",
"skip": [
"acme.agency"
]
}
'import requests
url = "https://app.manypi.com/api/leads/web-search"
payload = {
"query": "marketing agencies in Austin",
"page": 0,
"country": "us",
"skip": ["acme.agency"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'marketing agencies in Austin',
page: 0,
country: 'us',
skip: ['acme.agency']
})
};
fetch('https://app.manypi.com/api/leads/web-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.manypi.com/api/leads/web-search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'marketing agencies in Austin',
'page' => 0,
'country' => 'us',
'skip' => [
'acme.agency'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.manypi.com/api/leads/web-search"
payload := strings.NewReader("{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.manypi.com/api/leads/web-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.manypi.com/api/leads/web-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"sites": [
{
"domain": "northwind.studio",
"url": "https://northwind.studio/",
"title": "Northwind Studio | Brand agency in Austin",
"snippet": "Brand and web design for B2B companies."
}
],
"page": 0,
"next_page": 1,
"charged": 1
}{
"error": "<string>",
"code": "<string>",
"details": "<unknown>"
}Find company websites
Company websites for a target such as “marketing agencies in Austin”, found by ManyPI’s own search. Directories, review sites, marketplaces, media and LinkedIn or Meta pages are left out, and each company appears once. Nothing is scanned: read the sites yourself, or with the ManyPI Chrome extension’s Find companies.
Costs 1 crawl credit per results page, whether or not the page held companies. Up to 5 pages per target.
Requires the write permission.
curl --request POST \
--url https://app.manypi.com/api/leads/web-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "marketing agencies in Austin",
"page": 0,
"country": "us",
"skip": [
"acme.agency"
]
}
'import requests
url = "https://app.manypi.com/api/leads/web-search"
payload = {
"query": "marketing agencies in Austin",
"page": 0,
"country": "us",
"skip": ["acme.agency"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'marketing agencies in Austin',
page: 0,
country: 'us',
skip: ['acme.agency']
})
};
fetch('https://app.manypi.com/api/leads/web-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.manypi.com/api/leads/web-search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'marketing agencies in Austin',
'page' => 0,
'country' => 'us',
'skip' => [
'acme.agency'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.manypi.com/api/leads/web-search"
payload := strings.NewReader("{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.manypi.com/api/leads/web-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.manypi.com/api/leads/web-search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"marketing agencies in Austin\",\n \"page\": 0,\n \"country\": \"us\",\n \"skip\": [\n \"acme.agency\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"sites": [
{
"domain": "northwind.studio",
"url": "https://northwind.studio/",
"title": "Northwind Studio | Brand agency in Austin",
"snippet": "Brand and web design for B2B companies."
}
],
"page": 0,
"next_page": 1,
"charged": 1
}{
"error": "<string>",
"code": "<string>",
"details": "<unknown>"
}Authorizations
A ManyPI API key (mpi_...) from the profile menu → API Access in the dashboard, or an OAuth 2.1 access token obtained through the MCP consent flow.
Body
Who to find, in plain words.
2 - 200Results page, starting at 0.
0 <= x <= 4Two-letter country code to search in, for example de.
^[a-zA-Z]{2}$Domains you already have, left out of the answer.
1000