LinkedIn Ads & Lead Search
Search LinkedIn's Ad Library, get ad details with targeting data, run advanced lead searches with 30+ filters, and resolve geo IDs for location-based queries.
LinkedIn Ad Search
Search LinkedIn's Ad Library by keyword, company, country, and date range. Supports both structured parameters and raw Ad Library search URLs.
Endpoint: GET /ad_search
Credits: 0.2 per result returned
Request
# Structured search
curl "https://v3-api.texau.com/api/v1/ad_search?keyword=hiring&accountOwner=stripe&countries=US&dateOption=last-30-days" \
-H "x-api-key: YOUR_API_KEY"
# Or pass a full Ad Library URL directly
curl "https://v3-api.texau.com/api/v1/ad_search?searchUrl=https://www.linkedin.com/ad-library/search?accountOwner=stripe&keyword=hiring&dateOption=last-30-days" \
-H "x-api-key: YOUR_API_KEY"
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
searchUrl | string | No | Full LinkedIn Ad Library search URL (alternative to the params below) |
keyword | string | No | Search by keyword |
accountOwner | string | No | Company or advertiser name |
countries | string | No | Comma-separated country codes (e.g. US,GB,FR) or ALL |
dateOption | string | No | last-30-days, current-month, current-year, last-year, or custom-date-range |
startdate | string | No | Start date for custom range (YYYY-MM-DD) |
enddate | string | No | End date for custom range (YYYY-MM-DD) |
paginationToken | string | No | Token from previous response for next page |
At least one of searchUrl, keyword, or accountOwner must be provided.
Response
{
"elements": [
{
"id": "1383308086",
"advertiser": {
"name": "Blue Stripes",
"imageUrl": "https://media.licdn.com/dms/image/...",
"headline": "Promoted"
},
"content": {
"headline": null,
"description": "RARE CAREER OPPORTUNITY — Blue Stripes Finance Manager...",
"pageUrl": "https://www.linkedin.com/ad-library/detail/1383308086",
"imageUrl": null
},
"creativeType": "SPONSORED_UPDATE_NATIVE_DOCUMENT"
}
],
"pagination": {
"totalPages": 1,
"totalElements": 1,
"pageNumber": null,
"pageSize": 24,
"paginationToken": "0#24"
},
"status": 200,
"query": {
"keyword": "hiring",
"accountOwner": "stripe",
"dateOption": "last-30-days"
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
elements | array | Matching ads |
elements[].id | string | Ad ID |
elements[].advertiser | object | Advertiser info (name, imageUrl, headline) |
elements[].content | object | Ad creative (headline, description, pageUrl, imageUrl) |
elements[].creativeType | string | Ad format (e.g. SPONSORED_STATUS_UPDATE, SPONSORED_UPDATE_NATIVE_DOCUMENT) |
pagination.paginationToken | string | Pass as paginationToken query param for next page |
Billing Note
Billed at 0.2 credits per result in the elements array.
LinkedIn Ad Details
Get full details of a specific LinkedIn ad including creative variants, impression breakdown by country, and targeting segments.
Endpoint: GET /ad_details
Credits: 2 per call
Request
curl "https://v3-api.texau.com/api/v1/ad_details?url=https://www.linkedin.com/ad-library/detail/1215501393" \
-H "x-api-key: YOUR_API_KEY"
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | LinkedIn Ad Library detail URL |
Response
{
"element": {
"id": "1383308086",
"variants": [
{
"advertiser": {
"name": "Blue Stripes",
"linkedinUrl": "https://www.linkedin.com/company/28498353",
"imageUrl": "https://media.licdn.com/dms/image/...",
"headline": "Promoted"
},
"content": {
"description": "RARE CAREER OPPORTUNITY — Blue Stripes Finance Manager...",
"imageUrl": null,
"targetUrl": null,
"headline": null,
"ctaLabel": null
},
"creativeType": "SPONSORED_UPDATE_NATIVE_DOCUMENT"
}
],
"about": {
"format": "Document Ad",
"advertiserName": "Blue Stripes",
"advertiserUrl": "https://www.linkedin.com/company/28498353",
"paidBy": "Blue Stripes"
},
"impressions": null,
"targeting": null
},
"query": {
"url": "https://www.linkedin.com/ad-library/detail/1383308086"
},
"status": 200
}
impressions and targeting are populated when LinkedIn provides the data. For many ads they may be null.
LinkedIn Lead Search
Advanced LinkedIn lead search with 20+ filters, inclusion/exclusion criteria, and Sales Navigator URL support. Submit clean, human-readable labels (e.g. "seniority": ["Director"]) and TexAu resolves them to LinkedIn IDs server-side. Geo names are resolved automatically via the geo-id-search API.
Endpoint: POST /lead_search
Credits: 0.5 per result returned
Request
curl -X POST https://v3-api.texau.com/api/v1/lead_search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"search": "machine learning",
"currentJobTitles": ["VP Engineering", "CTO"],
"seniority": ["Director", "CXO"],
"companySize": ["51-200", "201-500"],
"geoIds": ["San Francisco Bay Area"],
"industries": ["Software Development"],
"functions": ["Engineering"],
"page": 1,
"exclude": {
"currentJobTitles": ["Intern", "Trainee"],
"industries": ["Education"]
}
}'
Parameters
Main filters
| Field | Type | Required | Description |
|---|---|---|---|
search | string | No | Keyword search across profiles |
currentJobTitles | string[] | No | Current job titles to include |
pastJobTitles | string[] | No | Past job titles to include |
currentCompanies | string[] | No | Current company names or LinkedIn URLs |
pastCompanies | string[] | No | Past company names or LinkedIn URLs |
seniority | string[] | No | Seniority levels — resolved to IDs (use /search_reference_data for valid labels) |
industries | string[] | No | Industry labels — resolved to IDs |
functions | string[] | No | Job functions (e.g. Engineering, Sales) — resolved to IDs |
companySize | string[] | No | Company headcount ranges (e.g. 51-200, 1001-5000) — resolved to IDs |
geoIds | string[] | No | Location names (resolved to LinkedIn geo IDs automatically) or numeric geo IDs. Max 10 |
locations | string[] | No | Location text strings (passed directly, no resolution) |
companyHeadquarterLocations | string[] | No | Company HQ location strings |
firstNames | string[] | No | First name filter |
lastNames | string[] | No | Last name filter |
schools | string[] | No | School or university names |
yearsOfExperience | string[] | No | Experience ranges — resolved to IDs (use /search_reference_data) |
yearsAtCurrentCompany | string[] | No | Tenure ranges — resolved to IDs |
profileLanguages | string[] | No | Profile language labels — resolved to IDs |
recentlyChangedJobs | boolean | No | Filter to profiles that recently changed jobs |
salesNavUrl | string | No | Sales Navigator search URL — all filters extracted automatically |
sessionId | string | No | Session ID from a previous response for consistent pagination. Auto-generated if omitted |
page | integer | No | Page number (1-based, default 1) |
Exclusion filters
Pass an exclude object to negate any of these filters:
Field (inside exclude) | Type | Description |
|---|---|---|
seniority | string[] | Exclude these seniority levels |
industries | string[] | Exclude these industries |
functions | string[] | Exclude these job functions |
locations | string[] | Exclude these locations |
geoIds | string[] | Exclude these geo IDs or location names |
currentCompanies | string[] | Exclude these current companies |
pastCompanies | string[] | Exclude these past companies |
currentJobTitles | string[] | Exclude these current titles |
pastJobTitles | string[] | Exclude these past titles |
schools | string[] | Exclude these schools |
companyHeadquarterLocations | string[] | Exclude these HQ locations |
Provide at least one filter parameter, or use salesNavUrl with a Sales Navigator URL.
Response
{
"elements": [
{
"id": "ACwAADcNXDMByxdFzyln9Cob7j6GtPph-lUVN7I",
"linkedinUrl": "https://www.linkedin.com/in/ACwAADcNXDMByxdFzyln9Cob7j6GtPph-lUVN7I",
"firstName": "Chris",
"lastName": "Viets",
"summary": "IT Enthusiast / Marvel Fan...",
"openProfile": false,
"premium": false,
"currentPositions": [
{
"title": "CTO",
"companyName": "ISG Intermed Service GmbH & Co. KG",
"companyId": "6775639",
"companyLinkedinUrl": "https://www.linkedin.com/company/6775639",
"description": "Prokurist und Abteilungsleiter...",
"current": true,
"startedOn": { "month": 4, "year": 2025 },
"tenureAtPosition": { "numYears": 1, "numMonths": 1 },
"tenureAtCompany": { "numYears": 1, "numMonths": 1 }
}
],
"pictureUrl": "https://media.licdn.com/dms/image/...",
"location": {
"linkedinText": "Geesthacht, Schleswig-Holstein, Germany"
}
}
],
"pagination": {
"totalElements": 7780,
"totalPages": 100,
"pageNumber": 1,
"previousElements": 0,
"pageSize": 25
},
"sessionId": "ak_abc123-550e8400-e29b-41d4-a716-446655440000"
}
Response Fields
| Field | Type | Description |
|---|---|---|
elements[].id | string | LinkedIn internal profile ID |
elements[].linkedinUrl | string | Full LinkedIn profile URL |
elements[].firstName | string | First name |
elements[].lastName | string | Last name |
elements[].summary | string | Profile summary / about text |
elements[].openProfile | boolean | Whether the profile accepts InMail from non-connections |
elements[].premium | boolean | Whether the profile has LinkedIn Premium |
elements[].currentPositions | array | Current job positions with company details and tenure |
elements[].pictureUrl | string | Profile photo URL |
elements[].location.linkedinText | string | Location as displayed on LinkedIn |
pagination.totalElements | integer | Total matching leads across all pages |
pagination.totalPages | integer | Total pages (max 100) |
pagination.pageSize | integer | Results per page (default 25) |
sessionId | string | Reuse in subsequent requests for consistent pagination |
Pagination
Use the sessionId from the first response to maintain consistent pagination across pages:
# Page 2 — pass the sessionId from page 1
curl -X POST https://v3-api.texau.com/api/v1/lead_search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"currentJobTitles": ["VP Engineering"],
"seniority": ["Director", "CXO"],
"page": 2,
"sessionId": "ak_abc123-550e8400-e29b-41d4-a716-446655440000"
}'
Resolution behavior
seniority,industries,functions,companySize,yearsOfExperience,yearsAtCurrentCompany,profileLanguages— Labels are resolved to LinkedIn numeric IDs server-side. Use/search_reference_datato get the valid labels.geoIds— Location names (e.g."San Francisco Bay Area") are resolved to numeric geoIds via the geo-id-search API. You can also pass numeric IDs directly to skip resolution. Max 10 names per request.- All other list fields — Passed through as-is. Max 70 items per list.
Billing Note
Billed at 0.5 credits per result in the elements array. A page returning 10 results costs 5 credits.
LinkedIn Geo ID Search
Look up LinkedIn Geo IDs by location name. Returns geoId + title pairs for use with profile_search's geoId parameter or for verifying location resolution in lead_search.
Endpoint: GET /geo_id_search
Credits: 0.01 per call
Request
curl "https://v3-api.texau.com/api/v1/geo_id_search?search=San%20Francisco" \
-H "x-api-key: YOUR_API_KEY"
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | Yes | Location name to search (e.g. San Francisco, United Kingdom) |
Response
{
"elements": [
{
"geoId": "102095887",
"title": "San Francisco Bay Area"
},
{
"geoId": "101933928",
"title": "San Francisco, California, United States"
}
],
"status": 200,
"error": null,
"query": {
"search": "San Francisco"
}
}
Usage with Profile Search
# Step 1: Resolve location to geo ID
curl "https://v3-api.texau.com/api/v1/geo_id_search?search=Berlin" \
-H "x-api-key: YOUR_API_KEY"
# → geoId: "106967730"
# Step 2: Use geo ID in profile search for precise results
curl "https://v3-api.texau.com/api/v1/profile_search?geoId=106967730&title=CTO" \
-H "x-api-key: YOUR_API_KEY"
LinkedIn Reference Data
Returns all valid filter labels for lead_search. Use this to populate dropdowns or validate filter values before submitting a search. No external API call is made — data is served from an in-memory catalog.
Endpoint: GET /search_reference_data
Credits: Free (0 credits)
Request
curl https://v3-api.texau.com/api/v1/search_reference_data \
-H "x-api-key: YOUR_API_KEY"
Response
{
"seniority": [
"CXO",
"Director",
"Entry Level",
"Entry Level Manager",
"Experienced Manager",
"In Training",
"Owner / Partner",
"Senior",
"Strategic",
"Vice President"
],
"companySize": [
"Self-employed",
"1-10",
"11-50",
"51-200",
"201-500",
"501-1000",
"1001-5000",
"5001-10000",
"10001+"
],
"functions": [
"Accounting",
"Administrative",
"Arts and Design",
"Business Development",
"Community and Social Services",
"Consulting",
"Education",
"Engineering",
"Entrepreneurship",
"Finance",
"Healthcare Services",
"Human Resources",
"Information Technology",
"Legal",
"Marketing",
"Media and Communication",
"Military and Protective Services",
"Operations",
"Product Management",
"Program and Project Management",
"Purchasing",
"Quality Assurance",
"Real Estate",
"Research",
"Sales",
"Customer Success and Support"
],
"industries": ["...434 industry labels (Accounting, Advertising Services, Banking, ...)..."],
"yearsOfExperience": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"yearsAtCurrentCompany": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"profileLanguages": {
"Arabic": "ar",
"Bahasa Indonesia": "in",
"Chinese": "zh",
"Czech": "cs",
"Danish": "da",
"Dutch": "nl",
"English": "en",
"French": "fr",
"German": "de",
"Italian": "it",
"Japanese": "ja",
"Korean": "ko",
"Malay": "ms",
"Norwegian": "no",
"Polish": "pl",
"Portuguese": "pt",
"Romanian": "ro",
"Russian": "ru",
"Spanish": "es",
"Swedish": "sv",
"Tagalog": "tl",
"Turkish": "tr"
}
}
Usage Pattern
# 1. Fetch valid filter values
REF=$(curl -s https://v3-api.texau.com/api/v1/search_reference_data \
-H "x-api-key: YOUR_API_KEY")
# 2. Use exact label strings in lead search
curl -X POST https://v3-api.texau.com/api/v1/lead_search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"seniority": ["Vice President", "Director"],
"functions": ["Engineering"],
"companySize": ["201-500", "501-1000"]
}'
Last updated 2 weeks ago
Built with Documentation.AI