curl --request POST \
--url https://api.preceptai.co.uk/v1/leads/post-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keywords": [
"SEO problem",
"struggling with SEO",
"search rankings dropped"
],
"timeframe": "month",
"limit": 30,
"name": "LinkedIn SEO problem posts",
"includeContactDetails": false
}
'import requests
url = "https://api.preceptai.co.uk/v1/leads/post-search"
payload = {
"keywords": ["SEO problem", "struggling with SEO", "search rankings dropped"],
"timeframe": "month",
"limit": 30,
"name": "LinkedIn SEO problem posts",
"includeContactDetails": False
}
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({
keywords: ['SEO problem', 'struggling with SEO', 'search rankings dropped'],
timeframe: 'month',
limit: 30,
name: 'LinkedIn SEO problem posts',
includeContactDetails: false
})
};
fetch('https://api.preceptai.co.uk/v1/leads/post-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://api.preceptai.co.uk/v1/leads/post-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([
'keywords' => [
'SEO problem',
'struggling with SEO',
'search rankings dropped'
],
'timeframe' => 'month',
'limit' => 30,
'name' => 'LinkedIn SEO problem posts',
'includeContactDetails' => false
]),
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://api.preceptai.co.uk/v1/leads/post-search"
payload := strings.NewReader("{\n \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\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://api.preceptai.co.uk/v1/leads/post-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.preceptai.co.uk/v1/leads/post-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 \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\n}"
response = http.request(request)
puts response.read_body{
"message": "Lead search job successfully created and 30 leads are being processed.",
"enrichment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>"
}Discover Leads from LinkedIn Posts
Discover leads directly from authors who recently published LinkedIn posts matching specific keywords.
Unlike /v1/leads/search (which searches by persona query), this endpoint discovers leads directly from content authors without requiring a persona query or running LLM query analysis.
Each discovered lead includes their verified profile and the specific LinkedIn post they authored.
Optionally enrich leads with verified contact details (emails/phones) and AI insights.
curl --request POST \
--url https://api.preceptai.co.uk/v1/leads/post-search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keywords": [
"SEO problem",
"struggling with SEO",
"search rankings dropped"
],
"timeframe": "month",
"limit": 30,
"name": "LinkedIn SEO problem posts",
"includeContactDetails": false
}
'import requests
url = "https://api.preceptai.co.uk/v1/leads/post-search"
payload = {
"keywords": ["SEO problem", "struggling with SEO", "search rankings dropped"],
"timeframe": "month",
"limit": 30,
"name": "LinkedIn SEO problem posts",
"includeContactDetails": False
}
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({
keywords: ['SEO problem', 'struggling with SEO', 'search rankings dropped'],
timeframe: 'month',
limit: 30,
name: 'LinkedIn SEO problem posts',
includeContactDetails: false
})
};
fetch('https://api.preceptai.co.uk/v1/leads/post-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://api.preceptai.co.uk/v1/leads/post-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([
'keywords' => [
'SEO problem',
'struggling with SEO',
'search rankings dropped'
],
'timeframe' => 'month',
'limit' => 30,
'name' => 'LinkedIn SEO problem posts',
'includeContactDetails' => false
]),
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://api.preceptai.co.uk/v1/leads/post-search"
payload := strings.NewReader("{\n \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\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://api.preceptai.co.uk/v1/leads/post-search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.preceptai.co.uk/v1/leads/post-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 \"keywords\": [\n \"SEO problem\",\n \"struggling with SEO\",\n \"search rankings dropped\"\n ],\n \"timeframe\": \"month\",\n \"limit\": 30,\n \"name\": \"LinkedIn SEO problem posts\",\n \"includeContactDetails\": false\n}"
response = http.request(request)
puts response.read_body{
"message": "Lead search job successfully created and 30 leads are being processed.",
"enrichment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
1 to 5 keywords or phrases to search LinkedIn posts for. Discovers leads directly from the authors of matching posts.
1 - 5 elementsTimeframe of LinkedIn posts to search: 'day' (past 24h), 'week' (past 7 days), 'month' (past 30 days), or 'year'. Defaults to 'month'.
day, week, month, year Maximum number of leads to return (up to 1000, default 30).
x <= 1000A readable name for your enrichment job for searching on your dashboard.
Whether to find and verify email addresses and phone numbers for discovered authors. Adds +1 credit for email, +10 for phone (or +11 for both) per person.
The type of contact details to find when includeContactDetails is true. Possible values: 'emails', 'phones'.
emails, phones Generate AI insights for each discovered lead. Charges 1.1 credits per lead if true, else 0.1 credits.
Optional webhook URL to receive the result of the lead search operations.
Optional. When true and webhookUrl is provided, contact results are progressively streamed.
