AI research
Researches the web with an agent and returns rows whose columns you define in the prompt.
| Provider | Billing Mode | Credentials | Cost Docs |
|---|---|---|---|
P Parallel | Usage | Managed, User | Usage-based Billed by usage: model tokens per 100-token block, plus each web search, page read and deep-research call the agent makes. Reading a site's feed or sitemap is free. |
Billing
Every operation this search can bill while it runs. Model token rates are charged per 100-token block; the rest are charged per call. Hover a price for its unit.
ProviderBilling ModeConnectionCost
Ge
Gemini
research-agent-v1-in-google-low
Always
Managed, User
0.0033credits
Ge
Gemini
research-agent-v1-out-google-low
Always
Managed, User
0.0163credits
Op
OpenAI
research-agent-v1-in-openai-high
Always
Managed, User
0.0217credits
Op
OpenAI
research-agent-v1-out-openai-high
Always
Managed, User
0.13credits
Op
OpenAI
research-agent-v1-in-openai-medium
Always
Managed, User
0.0087credits
Op
OpenAI
research-agent-v1-out-openai-medium
Always
Managed, User
0.052credits
An
Anthropic
research-agent-v1-in-anthropic-high
Always
Managed, User
0.0217credits
An
Anthropic
research-agent-v1-out-anthropic-high
Always
Managed, User
0.11credits
An
Anthropic
research-agent-v1-in-anthropic-low
Always
Managed, User
0.0087credits
An
Anthropic
research-agent-v1-out-anthropic-low
Always
Managed, User
0.0433credits
Pa
Parallel
research-agent-v1-search-parallel
Always
Managed, User
0.2credits
Pa
Parallel
research-agent-v1-extract-parallel
Always
Managed, User
0.1credits
Pa
Parallel
research-agent-v1-task-parallel
Always
Managed, User
0.5credits
Output Fields
You define the output fields
This search's columns come from its own config, not from the catalog: every
{% output name, type: "string" %} tag you declare in the prompt becomes one column on every row returned. The catalog therefore lists none — see the config reference below for the tag syntax.Code Example
const options = {
method: 'POST',
headers: {'content-type': 'application/json', authorization: 'Bearer <TOKEN>'},
body: JSON.stringify({
search: {
search_id: 'research:agent@1',
config: {
prompt: {
template: 'Find every blog post published on the monitored sites in the last 14 days.\n\n{% output post_title, type: "string", description: "Exact headline of the post" %}\n{% output post_url, type: "string", format: "url", description: "Canonical URL of the post" %}\n{% output published_at, type: "string", format: "date", description: "Publish date (YYYY-MM-DD) as supplied by the publisher\'s feed. Null if no publisher date exists — never infer one from the page." %}\n{% output post_meta, type: "json", schema: "meta", description: "Author, one-sentence excerpt, and where the date came from" %}',
json_schemas: {
meta: {
type: 'object',
properties: {
author: {type: 'string', description: 'Author name if the feed supplies one'},
excerpt: {type: 'string', description: 'One-sentence summary of the post'},
date_source: {type: 'string', description: '\'feed\', \'sitemap_lastmod\' or \'page\''}
}
}
}
},
domains: ['clay.com', 'instantly.ai'],
limit: 25,
unique_by: ['post_url'],
unique_match: 'all'
}
}
})
};
fetch('https://api.pipe0.com/v1/search/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pipe0.com/v1/search/run"
payload = { "search": {
"search_id": "research:agent@1",
"config": {
"prompt": {
"template": "Find every blog post published on the monitored sites in the last 14 days.
{% output post_title, type: \"string\", description: \"Exact headline of the post\" %}
{% output post_url, type: \"string\", format: \"url\", description: \"Canonical URL of the post\" %}
{% output published_at, type: \"string\", format: \"date\", description: \"Publish date (YYYY-MM-DD) as supplied by the publisher's feed. Null if no publisher date exists — never infer one from the page.\" %}
{% output post_meta, type: \"json\", schema: \"meta\", description: \"Author, one-sentence excerpt, and where the date came from\" %}",
"json_schemas": { "meta": {
"type": "object",
"properties": {
"author": {
"type": "string",
"description": "Author name if the feed supplies one"
},
"excerpt": {
"type": "string",
"description": "One-sentence summary of the post"
},
"date_source": {
"type": "string",
"description": "'feed', 'sitemap_lastmod' or 'page'"
}
}
} }
},
"domains": ["clay.com", "instantly.ai"],
"limit": 25,
"unique_by": ["post_url"],
"unique_match": "all"
}
} }
headers = {
"content-type": "application/json",
"authorization": "Bearer <TOKEN>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)curl --request POST \
--url https://api.pipe0.com/v1/search/run \
--header 'authorization: Bearer <TOKEN>' \
--header 'content-type: application/json' \
--data @- <<EOF
{
"search": {
"search_id": "research:agent@1",
"config": {
"prompt": {
"template": "Find every blog post published on the monitored sites in the last 14 days.\n\n{% output post_title, type: \"string\", description: \"Exact headline of the post\" %}\n{% output post_url, type: \"string\", format: \"url\", description: \"Canonical URL of the post\" %}\n{% output published_at, type: \"string\", format: \"date\", description: \"Publish date (YYYY-MM-DD) as supplied by the publisher's feed. Null if no publisher date exists — never infer one from the page.\" %}\n{% output post_meta, type: \"json\", schema: \"meta\", description: \"Author, one-sentence excerpt, and where the date came from\" %}",
"json_schemas": {
"meta": {
"type": "object",
"properties": {
"author": {
"type": "string",
"description": "Author name if the feed supplies one"
},
"excerpt": {
"type": "string",
"description": "One-sentence summary of the post"
},
"date_source": {
"type": "string",
"description": "'feed', 'sitemap_lastmod' or 'page'"
}
}
}
}
},
"domains": [
"clay.com",
"instantly.ai"
],
"limit": 25,
"unique_by": [
"post_url"
],
"unique_match": "all"
}
}
}
EOFpackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pipe0.com/v1/search/run"
payload := strings.NewReader("{\"search\":{\"search_id\":\"research:agent@1\",\"config\":{\"prompt\":{\"template\":\"Find every blog post published on the monitored sites in the last 14 days.\\n\\n{% output post_title, type: \\\"string\\\", description: \\\"Exact headline of the post\\\" %}\\n{% output post_url, type: \\\"string\\\", format: \\\"url\\\", description: \\\"Canonical URL of the post\\\" %}\\n{% output published_at, type: \\\"string\\\", format: \\\"date\\\", description: \\\"Publish date (YYYY-MM-DD) as supplied by the publisher's feed. Null if no publisher date exists — never infer one from the page.\\\" %}\\n{% output post_meta, type: \\\"json\\\", schema: \\\"meta\\\", description: \\\"Author, one-sentence excerpt, and where the date came from\\\" %}\",\"json_schemas\":{\"meta\":{\"type\":\"object\",\"properties\":{\"author\":{\"type\":\"string\",\"description\":\"Author name if the feed supplies one\"},\"excerpt\":{\"type\":\"string\",\"description\":\"One-sentence summary of the post\"},\"date_source\":{\"type\":\"string\",\"description\":\"'feed', 'sitemap_lastmod' or 'page'\"}}}}},\"domains\":[\"clay.com\",\"instantly.ai\"],\"limit\":25,\"unique_by\":[\"post_url\"],\"unique_match\":\"all\"}}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
req.Header.Add("authorization", "Bearer <TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.pipe0.com/v1/search/run', [
'body' => '{"search":{"search_id":"research:agent@1","config":{"prompt":{"template":"Find every blog post published on the monitored sites in the last 14 days.\\n\\n{% output post_title, type: \\"string\\", description: \\"Exact headline of the post\\" %}\\n{% output post_url, type: \\"string\\", format: \\"url\\", description: \\"Canonical URL of the post\\" %}\\n{% output published_at, type: \\"string\\", format: \\"date\\", description: \\"Publish date (YYYY-MM-DD) as supplied by the publisher\'s feed. Null if no publisher date exists — never infer one from the page.\\" %}\\n{% output post_meta, type: \\"json\\", schema: \\"meta\\", description: \\"Author, one-sentence excerpt, and where the date came from\\" %}","json_schemas":{"meta":{"type":"object","properties":{"author":{"type":"string","description":"Author name if the feed supplies one"},"excerpt":{"type":"string","description":"One-sentence summary of the post"},"date_source":{"type":"string","description":"\'feed\', \'sitemap_lastmod\' or \'page\'"}}}}},"domains":["clay.com","instantly.ai"],"limit":25,"unique_by":["post_url"],"unique_match":"all"}}}',
'headers' => [
'authorization' => 'Bearer <TOKEN>',
'content-type' => 'application/json',
],
]);
echo $response->getBody();POST /v1/search/run HTTP/1.1
Content-Type: application/json
Authorization: Bearer <TOKEN>
Host: api.pipe0.com
Content-Length: 1083
{"search":{"search_id":"research:agent@1","config":{"prompt":{"template":"Find every blog post published on the monitored sites in the last 14 days.\n\n{% output post_title, type: \"string\", description: \"Exact headline of the post\" %}\n{% output post_url, type: \"string\", format: \"url\", description: \"Canonical URL of the post\" %}\n{% output published_at, type: \"string\", format: \"date\", description: \"Publish date (YYYY-MM-DD) as supplied by the publisher's feed. Null if no publisher date exists — never infer one from the page.\" %}\n{% output post_meta, type: \"json\", schema: \"meta\", description: \"Author, one-sentence excerpt, and where the date came from\" %}","json_schemas":{"meta":{"type":"object","properties":{"author":{"type":"string","description":"Author name if the feed supplies one"},"excerpt":{"type":"string","description":"One-sentence summary of the post"},"date_source":{"type":"string","description":"'feed', 'sitemap_lastmod' or 'page'"}}}}},"domains":["clay.com","instantly.ai"],"limit":25,"unique_by":["post_url"],"unique_match":"all"}}}