advanced_search_leads
ChatGPTSearch for leads using advanced filters (job titles, locations, seniority, company size, industries, signals...), using the Pipecorn lead database by default or live LinkedIn Sales Navigator when live:true. Consumes the daily profile-extraction plan quota for profiles extracted; consumed quota cannot be restored before its scheduled reset. Returns a job_id — poll get_job_result every 5s until status is 'completed'. Use search_locations to get location IDs, get_lists for account/lead list UUIDs. MANDATORY — you MUST call preview_advanced_search_leads first with the same filters, show the user the total_count and sample leads, and wait for their explicit confirmation before calling this tool. Also estimate the duration based on the limit parameter: ~(limit / 2500 * 10) minutes, minimum 1 minute.
bulk_enrich_contacts
ChatGPTEnrich multiple contacts with email or phone number (min 2, max 100). Each successfully resolved email costs 3 enrichment credits and each successfully resolved phone costs 30; unresolved data costs nothing. Use this whenever you have 2 or more contacts to enrich — never call single_enrich_contact in a loop or in parallel when you have multiple contacts. Returns a job_id — poll get_job_result every 5s until status is 'completed'.
create_list
ChatGPTCreate a company list from named companies, matched against the Pipecorn database. By default (live: true) the matched companies are also pushed to a new LinkedIn Sales Navigator list, which requires a synced Sales Navigator account. Pass live: false when Sales Navigator isn't synced or when the list is only used inside Pipecorn (e.g. as included_account_lists in advanced_search_leads).
create_persona
ChatGPTCreate a new persona with job titles, industries, locations, and company size filters. IMPORTANT: Do NOT call this tool without first asking the user in a separate turn: 'Do you want AI to expand job titles? (ai_expand_job_titles)'
delete_persona
ChatGPTDelete a persona by its UUID.
delete_search
ChatGPTPermanently delete a lead search by its id (from get_searches). Its leads stay in the account and the consumed extraction quota is not restored. Only delete a search whose get_search status is 'finished' — never one that is still running. Ask the user for explicit confirmation before calling this tool.
enrich_account
ChatGPTEnrich a company with firmographic data (industry, size, revenue, LinkedIn URL, headquarters...), from the Pipecorn database by default or live LinkedIn when live:true. Costs 1 enrichment credit when a company is resolved; a lookup with no match costs nothing. Provide at least one of: company_linkedin_url, name, or domain. If the database has no match, retry the same call with live:true before telling the user the company was not found.
find_connections
ChatGPTFind mutual 1st-degree LinkedIn connections between the authenticated user and a target LinkedIn profile. Requires the user to have a LinkedIn Sales Navigator account connected. Returns a list of connections with their name, current position, and LinkedIn URLs.
find_lookalike_companies
ChatGPTFind companies similar to one or more reference companies, using the Pipecorn database by default or live LinkedIn Sales Navigator when live:true. Consumes the daily and monthly company-import plan quotas for companies imported; consumed quota cannot be restored before its scheduled reset. If no reference company is found in the database, retry the same call with live:true. Pass company_linkedin_url for a single reference, or company_linkedin_urls (up to 3) for multiple. Returns a job_id — poll get_job_result every 5s until status is 'completed'.
get_account_status
ChatGPTGet the connected account's email, plan, and integration status (integrations.linkedin_session_valid, integrations.sales_navigator_session_valid). Searches run on the Pipecorn database by default and need none of this. Call it only when the user asks for a live Sales Navigator search: if sales_navigator_session_valid is false, tell them their Sales Navigator isn't synced and that you can search the Pipecorn database instead.
get_company_hiring
ChatGPTGet active job openings for a company. Returns job title, URL, location, employment type, date posted, description, and hiring team members with their LinkedIn profiles. Costs 1 enrichment credit per job returned; a lookup with no results costs nothing. Provide at least one of: company_domain, company_name, or company_linkedin_url.
get_company_stack
ChatGPTGet the technology stack of a company (list of tools/technologies detected). Costs 3 credits per request. Provide at least one of: company_domain, company_name, or company_linkedin_url.
get_contact_enrichment
ChatGPTGet the enrichment result for a contact by its enrichment_id. Poll until status is 'finished' to get the email or phone.
get_credits
ChatGPTGet remaining Pipecorn credits and plan quotas
get_headcount
ChatGPTGet department headcount evolution (3-month, 6-month, 12-month) for a company. Requires the LinkedIn company ID (e.g. '1818', extractable from the company LinkedIn URL). Optionally filter by specific departments; omit to get all departments.
get_job_result
ChatGPTWait for the result of an async job (search_accounts, advanced_search_leads, etc.). Call this ONCE — it handles retries internally with exponential backoff and waits up to ~2 minutes. Returns 'completed' with data when done, or 'timed_out' if the job didn't finish in time. Do NOT call it in a loop yourself.
get_list
ChatGPTRetrieve the full contents of a list (companies or leads) by its UUID. This is the only tool that returns the actual entries inside a list — always use this after get_lists to access list contents.
get_lists
ChatGPTRetrieve all Sales Navigator lists (companies or leads) with their UUIDs. To fetch the full contents of a specific list, take its UUID and call get_list.
get_persona
ChatGPTRetrieve a single persona by its UUID.
get_search
ChatGPTGet the status and results of a lead search by its id. Poll until status is 'finished'. Polling strategy: exponential backoff — wait 2s, then 4s, 8s, 16s, 32s, 64s between each attempt. After the 64s attempt, if still not finished, stop and tell the user to ask you to check again in a few minutes. IMPORTANT: leads in the results may already have email and phone fields populated — always check these fields before calling single_enrich_contact.
get_searches
ChatGPTRetrieve lead searches, most recent first, 100 per page. By default returns all searches. Set only_enriched=true to return only completed enriched searches. Pass page for older searches while pagination.has_more is true.
list_personas
ChatGPTRetrieve all personas defined in the Pipecorn account.
preview_advanced_search_leads
ChatGPTPreview the results of an advanced lead search before launching it. Returns total_count (estimated matching profiles) and up to 25 sample leads. ALWAYS call this tool first before advanced_search_leads — show the total_count and sample leads to the user, then ask for explicit confirmation before proceeding with the actual search.
preview_search_accounts
ChatGPTPreview the results of a company search before launching it. Returns total_count (estimated matching companies) and up to 25 sample accounts. ALWAYS call this tool first before search_accounts — show the total_count and sample accounts to the user, then ask for explicit confirmation before proceeding with the actual search.
preview_search_accounts_by_stack
ChatGPTPreview which companies use a given set of technologies, before importing any of them. Free — costs no credits. Returns total_count (exact number of matching companies) and up to 25 sample companies with the technologies detected on each. ALWAYS call this tool first before search_accounts_by_stack — show the total_count and sample companies to the user, then ask for explicit confirmation before proceeding with the actual import. ALWAYS resolve technology names to slugs with search_technologies first — never guess a slug.
search_accounts
ChatGPTSearch companies by filters (industry, location, size, revenue, keyword), using the Pipecorn database by default or live LinkedIn Sales Navigator when live:true. Starts an import job that consumes the daily and monthly company-import plan quotas for companies imported; consumed quota cannot be restored before its scheduled reset. Returns a job_id immediately — poll get_job_result every 5s until status is 'completed'. Use search_locations to get location IDs before filtering by location. MANDATORY — you MUST call preview_search_accounts first with the same filters, show the user the total_count and sample accounts, and wait for their explicit confirmation before calling this tool. IMPORTANT — keyword validation workflow (mandatory when the user provides a natural-language keyword): 1. Expand the keyword into a boolean query with synonyms and related terms using OR operators. Example: user says "outbound agency" → keyword becomes ("outbound" OR "prospecting" OR "prospection" OR "cold outreach" OR "lead generation") AND ("agency" OR "agencies" OR "agence" OR "cabinet"). 2. Show the proposed boolean query to the user in a clear, readable format. 3. Explicitly ask: "Does this keyword look good? You can edit it before I launch the search." 4. Wait for the user's confirmation or edited version before calling this tool. Never skip this confirmation step when a keyword is involved. MANDATORY — before calling this tool, estimate the duration based on the limit parameter and tell the user: ~(limit / 1000 * 10) minutes, minimum 1 minute. Example: limit=100 → ~1 minute, limit=500 → ~5 minutes. Always announce this to the user before calling the tool.
search_accounts_by_stack
ChatGPTImport companies that use a given set of technologies (tech-stack intent search). Returns a job_id immediately — poll get_job_result every 5s until status is 'completed'. MANDATORY — you MUST call preview_search_accounts_by_stack first with the same filters, show the user the total_count and sample companies, and wait for their explicit confirmation before calling this tool. MANDATORY — this costs 3 enrichment credits per company actually imported. Before calling, compute limit x 3 credits and announce it as the maximum possible cost (e.g. limit=200 → up to 600 credits). If you are unsure the balance covers it, call get_credits first and warn the user. ALWAYS resolve every technology name to a slug with search_technologies before filling stacks or excluded_stacks — never guess or hardcode a slug. The countries filter takes two-letter ISO country codes (e.g. ['US', 'FR']), NOT location IDs — do NOT call search_locations for this tool. Use search_industries for included_industries / excluded_industries.
search_industries
ChatGPTSearch for LinkedIn industry IDs by name. ALWAYS call this before advanced_search_leads when the user mentions an industry — never guess industry IDs.
search_leads
ChatGPTExtract leads from a LinkedIn Sales Navigator URL provided directly by the user from their browser. Consumes the daily profile-extraction plan quota for profiles extracted; consumed quota cannot be restored before its scheduled reset. Never construct this URL yourself. Returns a search id — use get_search to poll until status is 'finished'.
search_leads_in_company
ChatGPTSearch for leads at a specific company using filters. Consumes the daily profile-extraction plan quota for profiles extracted; consumed quota cannot be restored before its scheduled reset. First call enrich_account to get company_linkedin_id, then use it here with filters. job_titles is required — if the user doesn't specify any job title, pass [""] to return all employees. name is optional: when omitted, the search is named after the company and today's date. Returns a search id — use get_search to poll until status is 'finished'.
search_locations
ChatGPTResolve a location name (city, region, country) into location IDs. ALWAYS call this before search_accounts/search_leads when the user mentions a location — never guess or hardcode location IDs. The source must match the search mode: 'database' is the default and matches searches run with the default live:false; only pass source 'live' when the search itself runs with live:true. Geo IDs are not interchangeable — a mismatch returns zero results without an error. Pass exactly one plain location name per call (e.g. 'Paris', not a URL or comma-separated list). Returns an array of {name,id}; pick the best match by the human-readable name.
search_technologies
ChatGPTResolve a technology name into its Pipecorn technology slug. ALWAYS call this before using a technology in a tech-stack filter — never guess or hardcode a slug. Pass exactly one plain technology name per call (e.g. 'hubspot', not a comma-separated list). Returns {technologies:[{slug,name,category,logo,description}]}; pick the best match by the human-readable name and category. Free — costs no credits. Do not confuse this with get_company_stack, which does the opposite: it takes a company and returns the technologies detected on it (3 credits).
single_enrich_contact
ChatGPTEnrich a single contact with email and/or phone. A successfully resolved email costs 3 enrichment credits and a successfully resolved phone costs 30; unresolved data costs nothing. Returns an enrichment_id and a status: when status is 'finished' the email and phone are already in the response; when it is 'pending', poll get_contact_enrichment with that enrichment_id until it turns 'finished'. Only use this for exactly 1 contact — use bulk_enrich_contacts for 2 or more contacts. Only call this if the contact does not already have the requested data from get_search results. Use enrichment_type ['email', 'phone'] to get both at once. For email enrichment, domain or company_name is required. For phone enrichment, linkedin_url is required.
update_list
ChatGPTAdd companies to an existing company list. Companies are appended — existing ones are not removed. By default (live: true) the Sales Navigator list is updated too, which requires a synced Sales Navigator account; pass live: false to update the list in Pipecorn only.
update_persona
ChatGPTUpdate an existing persona's filters (job titles, industries, locations, company size). IMPORTANT: Do NOT call this tool without first asking the user in a separate turn: 'Do you want AI to expand job titles? (ai_expand_job_titles)'