Gojiberry
Find leads and run outreach
- Category
- Sales & CRM
- Primary Subcategory
- B2B Prospecting & Contact Data
Integration details
Description
Gojiberry brings your outbound sales workflow into ChatGPT. Search a directory of B2B leads and companies with free masked previews, reveal full records, and enrich contacts with verified emails and mobile phone numbers. Organize contacts into lists, create and manage outreach campaigns, review campaign logs, configure lead-sourcing Agents, and read and reply to conversations in your unified inbox - all through natural language. Requires a Gojiberry account and API key from app.gojiberry.ai.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- B2B Prospecting & Contact Data
- Secondary Subcategories
- None listed
- Brand
- Gojiberry AI
- Access
- Account required
- First tracked
- 2026-09-13
- Tool count
- 36
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT B2B Prospecting & Contact Data
View Category36 tools agents can invoke
Add existing contacts to a list. In Gojiberry, campaign membership is driven by list membership: adding a contact to a list that is linked to a campaign enrolls the contact in that campaign.
add_contacts_to_list
Create an outreach campaign (the campaign agent — what the Gojiberry platform calls an 'Agent') with its steps, lead-source lists, and sending seats. The campaign reaches out to the contacts of its lists. FULL CYCLE — this is the last of the three resources of a Full Cycle agent (leads sourced AND outreached automatically, end to end), created in this order: 1. `create_list` — the list linking the two agents; 2. `create_agent` — the source agent that fills the list with leads; 3. `create_campaign` (this tool) — the campaign agent, with that list in `listIds`. Without this campaign, a source agent is just a 'legacy agent' that sources leads but does no outreach. SENSITIVE — unless the user explicitly asked to launch the campaign immediately, pass `active: false`. The API defaults `active` to true, and an active campaign starts the outreach automatically on a daily basis (launch hours are configured in the LinkedIn seat settings). Lists (lead source): - At least one list is required (`listIds`). The campaign reaches out to the contacts of its lists. Lists are typically filled by a source agent (see `create_agent`) or by importing contacts (`add_contacts_to_list`). Steps — executed in array order; `stepNumber` is assigned automatically from the order. Valid types: `invitation`, `invitationNote`, `message`, `voiceMessage`, `visitProfile`, `likePosts` (all LinkedIn), and `email`. Ordering rules (the API rejects violations): - At most ONE Connection Request step (`invitation` or `invitationNote`) per campaign. - An invitation cannot come AFTER a `message` or `voiceMessage` step. - Every step's `delayAfterLastStep` must be at least 1 day (integer, default 2). Per-type fields: - `message` and `email` steps take a `messageMode`: 'ai' (content generated by AI for each contact — the default when no content is provided) or 'same' (the provided content is sent as-is; supports the [FirstName], [LastName] and [Company] variables). In 'same' mode `message` is required (max 1900 chars for LinkedIn messages) and `email` steps also require `subject`. - `invitationNote` requires `note` (max 180 chars, 280 with a Sales Navigator seat). - `voiceMessage` requires `url` pointing to the audio file. - `likePosts` accepts `numberOfPosts` (1-3, default 1). - `visitProfile` and `invitation` need no extra fields. Seats (senders): - Any LinkedIn step → `linkedinSeatId` is REQUIRED (and not allowed on email-only campaigns). - Any `email` step → at least one `emailSeatId` is REQUIRED. Multiple email seats (up to 100) are only allowed when the campaign has email steps EXCLUSIVELY. - There is no seat-listing endpoint; seat IDs can be found on the user's existing campaigns (`list_campaigns` / `get_campaign`). When the campaign has a Connection Request step, 1st-degree connections are excluded from the campaign by default.
create_campaign
Create a new contact in Gojiberry. firstName, lastName, and profileUrl are required.
create_contact
Create a new list. Pass `campaignId` to link the list to a campaign so contacts added to this list are enrolled in that campaign. A list is the link between a source agent (which imports the leads it finds into the list) and a campaign agent (which reaches out to the list's contacts). When setting up a Full Cycle agent (leads sourced and outreached automatically, end to end), create the list FIRST, then the source agent (`create_agent`, passing this list's ID as `listId`), then the campaign agent (`create_campaign`, passing this list's ID in `listIds`).
create_list
Create a new source agent — a lead finder that continuously sources leads matching an ICP, scores them with AI, and imports them into a list. Source agents do NOT do outreach; outreach is done by a campaign agent (`create_campaign`). IMPORTANT — a list is mandatory: the agent imports the leads it sources into a list, so you must create a list first (use `create_list`) and pass its ID in the required `listId` field. The list must belong to the authenticated user. FULL CYCLE — a source agent alone is almost never what the user wants: without a campaign it shows up as a 'legacy agent' in the platform, which only sources leads and does no outreach. Guide the user to the Full Cycle setup (leads sourced AND outreached automatically, end to end) by creating three resources in this order: 1. `create_list` — the list is the link between the two agents; 2. `create_agent` (this tool) — the source agent, with that list as `listId`; 3. `create_campaign` — the campaign agent, with that list in `listIds`. For `agentType: "autopilot"` (the default), signal `variables` configure where leads are sourced from. When variables are provided, at least 4 are required (max 15). Each variable must have a `value`, which usually contains a keyword or a piece of data matching its type (e.g. a search keyword for SEARCH_KEYWORD, a LinkedIn page URL for COMPETITOR_PAGE_URL). LOOKALIKE variables are not allowed, and JOB_SEARCH variables are not authorized for now. If the active agent limit is reached, the agent is still created but paused.
create_agent
Start an email enrichment for a contact. The enrichment runs in the background and this tool returns immediately (the providers can take from a few seconds up to several minutes). To check completion, poll `get_contact`: the enrichment is done once `emailEnriched` is true — the `email` field is then filled if an email was found, and stays empty otherwise. COSTS CREDITS: 1 credit when an email is found; failed enrichments consume nothing.
enrich_contact_email
Start a mobile phone enrichment for a contact. The enrichment runs in the background and this tool returns immediately (the providers can take from a few seconds up to several minutes). To check completion, poll `get_contact`: the enrichment is done once `phoneEnriched` is true — the `phone` field is then filled if a phone was found, and stays empty otherwise. COSTS CREDITS: 10 credits when a phone number is found; failed enrichments consume nothing.
enrich_contact_phone
Get detailed information about a single campaign by ID, including its `steps` array and its `listId` (the list of contacts enrolled in this campaign — campaign membership in Gojiberry is driven by list membership). Engagement metrics (reply rate, send rate, connection acceptance rate, etc.) are derived from the contacts in the campaign's list: each contact carries a `campaignStatus` array of per-step records, each with a `type` (e.g. `message`, `voiceMessage`, `email`, `connection`, `view`, ...) and a `state` (e.g. `sent`, `delivered`, `answered`, `skipped`, ...). A contact counts as a reply when at least one entry has a `type` of `message`, `voiceMessage`, or `email` AND a `state` of `answered`; the reply rate is the number of contacts with a reply divided by the total contacts in the list. Other metrics follow the same pattern with different `type`/`state` combinations.
get_campaign
Retrieve the outreach event log of a campaign (paginated, most recent first). Each entry records an action performed on a contact — e.g. invitation, invitationNote, invitationAccepted, message, voiceMessage, visitProfile, likePosts, email, replied, email-reply, interested, not-interested — with the contact, the campaign ID, and a timestamp. Useful for questions like 'what did this campaign do recently' or 'who accepted an invitation'.
get_campaign_logs
Get detailed information about a single contact by ID.
get_contact
Legacy endpoint: get the LinkedIn (and email) conversations the user has had with a specific contact. Returns chats with their messages, ordered by most recent message first. The same data is available with pagination through `list_unibox_threads` and `get_unibox_thread_messages`.
get_unibox_for_contact
Free. Returns the suggested values for the `industry` filter of `search_leads` and `search_companies`, both as a flat list and grouped by category. Other industry values are accepted by the search tools, but these labels line up with the directory taxonomy and give the best results.
get_directory_industries
Get contact counts grouped by intent type. Useful for understanding the distribution of contact intents.
get_intent_type_counts
Get a single list by ID, including its contacts.
get_list
Get the organization of the authenticated user (company name, website, industry, size, owner ID, etc.).
get_organization
Get one source agent's full configuration, including the ICP (target job titles, industries, company sizes, locations, company types, ignored companies, mandatory keywords) and the `listId` of the list it imports sourced leads into. Source agents find leads; outreach is done by the campaign agent that uses the same list (see `get_campaign`).
get_agent
Get up to 100 recent run logs for a source agent, newest first. Useful for questions about how many leads an agent created, which signals produce leads, or whether recent signal runs failed.
get_agent_logs
Get paginated unibox messages for a thread owned by the authenticated user.
get_unibox_thread_messages
Act on behalf of another member of the organization. Once set, all subsequent tool calls in this session (contacts, campaigns, lists, agents, unibox, ...) are executed as that user, until impersonation is changed or cleared. Only works when the current API key belongs to the ORGANIZATION OWNER, and the target user must be a member of the same organization (member IDs are returned by `list_organization_members`). Passing `userId: null` stops impersonating and restores the key owner. This stores the impersonation on the current MCP session. For clients that open a new MCP session per tool call, the stateless `actAsUserId` argument available on every tool provides the same behavior on a per-call basis.
impersonate_user
Retrieve campaigns. A campaign is the campaign agent — what the Gojiberry platform calls an 'Agent': it performs the outreach (LinkedIn invitations, messages, emails, ...) to the contacts of its lists. Lead sourcing is done separately by source agents (see `list_agents`). By default (when `status` is omitted) this returns ALL campaigns — active AND inactive. Do not pass `status` unless the user explicitly asked for only active or only paused campaigns. `status` values: - "all" (same as omitting the argument): every campaign, regardless of state. - "active": ONLY campaigns currently running. - "inactive": ONLY paused campaigns — NOT all campaigns. If the user has no paused campaigns this returns an empty array even though active campaigns exist. Each campaign has a `listId` pointing to the list of contacts enrolled in it (campaign membership in Gojiberry is driven by list membership). Engagement metrics (reply rate, answered count, etc.) are derived from the contacts in the campaign's list: each contact carries a `campaignStatus` array of per-step records, each with a `type` (e.g. `message`, `voiceMessage`, `email`, `connection`, `view`, ...) and a `state` (e.g. `sent`, `delivered`, `answered`, `skipped`, ...). A contact counts as a reply when at least one `campaignStatus` entry has a `type` of `message`, `voiceMessage`, or `email` AND a `state` of `answered`; the reply rate is the number of contacts with a reply divided by the total contacts in the list.
list_campaigns
Retrieve contacts with optional pagination, search, and filtering. Returns a paginated list of contacts.
list_contacts
Get paginated unibox (unified inbox) threads. Provide `seatId` to fetch threads for a specific LinkedIn seat; omit it to fetch threads across all seats in the account.
list_unibox_threads
Retrieve all lists with their contact counts.
list_lists
List all members of the authenticated user's organization, with their user ID, name, email, role, and active status. When the API key belongs to the organization owner, a member's `id` is a valid target for impersonation (`impersonate_user` or the `actAsUserId` argument).
list_organization_members
List all source agents. A source agent is a lead finder: it continuously sources prospects matching the user's ICP and scores them with AI, importing them into its list. It does NOT do outreach — outreach (LinkedIn + email) is done by the campaign agent (see `list_campaigns`). A source agent whose list is not used by any campaign is a 'legacy agent': it only sources leads, with no outreach.
list_agents
Reject a lead: the contact disappears from the review queue, is excluded from campaign scheduling (`readyForCampaign` is reset to false), and will not be picked up by automatic campaign launches. The rejection records who rejected the lead and when (`rejectedAt` / `rejectedByUserId` on the returned contact). Providing a `reason` is optional but recommended: reasons are stored on the contact and help understand why leads are rejected so targeting can be refined. Use one of the stable reason codes when the lead does not match the targeting; use 'other' together with `reasonText` for anything else (`reasonText` is required with 'other' and ignored for the other codes). Calling this on an already-rejected contact only updates the reason (latest reason wins); the original rejection timestamp and reviewer are kept. A rejection is reversible with `unreject_contact`.
reject_contact
Remove contacts from a list. Because campaign membership is driven by list membership, this also removes the contacts from any campaign linked to the list. The contacts themselves are not deleted.
remove_contacts_from_list
Reveal full company objects from the directory (name, description, website, LinkedIn URL, funding data, exact headcount, ...). COSTS CREDITS: 0.5 credit per company actually returned (ids that resolve to no document are not charged). Revealing the same id twice charges twice, so avoid re-revealing ids you already have. If the balance cannot cover all requested ids, only the first affordable ids are revealed and charged. REQUIRES EXPLICIT USER CONSENT: never call this tool on your own initiative. Before calling, tell the user how many companies would be revealed and the credit cost, and wait for their explicit confirmation. A generic request like 'find me companies' is NOT consent to spend credits — only reveal after the user has approved the spend. `ids` come from `search_companies` (the `id` field — the numeric LinkedIn organisation id). Max 100 ids per request; duplicates are de-duplicated.
reveal_companies
Reveal full lead objects from the directory (name, company, LinkedIn profile URL, website, country, ...). Emails/phones are NOT included — enrichment is a separate feature. COSTS CREDITS: 0.5 credit per lead actually returned (ids that resolve to no document are not charged). Revealing the same id twice charges twice, so avoid re-revealing ids you already have. If the balance cannot cover all requested ids, only the first affordable ids are revealed and charged. REQUIRES EXPLICIT USER CONSENT: never call this tool on your own initiative. Before calling, tell the user how many leads would be revealed and the credit cost, and wait for their explicit confirmation. A generic request like 'find me leads' is NOT consent to spend credits — only reveal after the user has approved the spend. Pass `listId` (one of your lists, see `list_lists`) to also save the revealed leads as contacts into that list at no extra credit cost — leads already in the workspace, excluded, or missing a first/last name are skipped. The save is synchronous, so a large reveal with `listId` can take noticeably longer. `ids` come from `search_leads` (the `id` field — the LinkedIn member id). Max 100 ids per request; duplicates are de-duplicated.
reveal_leads
Search the Gojiberry companies directory (shared pool). FREE — no credits are consumed. Returns MASKED company previews: only `id`, `size`, `industry`, and `headquarters` are filled; every other field (name, website, description, ...) is returned empty. Use `reveal_companies` with the returned `id`s to get the full objects (0.5 credit each). At least one filter is required. Results are deterministic (same filters + page always return the same companies). `technologiesUsed` disclaimer: a company 'uses' a technology when that technology was mentioned in at least one of the company's job offers in the past months. It signals the company hires for that technology, NOT a verified install base.
search_companies
Search the Gojiberry leads directory (shared pool) to buy leads matching your criteria. FREE — no credits are consumed. Returns MASKED lead previews: only `id`, `firstName`, `jobTitle`, `location`, and `industry` are filled; every other field (lastName, company, profileUrl, ...) is returned empty so you can see which columns become available after revealing. Use `reveal_leads` with the returned `id`s to get the full objects (0.5 credit each). At least one filter is required (no filters returns an empty result). Results are deterministic: the same filters + page always return the same leads. Deep paging is capped at 10,000 results. For the `industry` filter, prefer the values returned by `get_directory_industries` (it's a soft preference/boost, not a hard filter).
search_leads
Send a social message to a real person in an existing unibox thread (delivered through the thread's social conversation). This delivers an actual message to the thread's attendee and cannot be undone. `chatId` is the internal thread ID returned as `id` by `list_unibox_threads`, not the social conversation URN.
send_unibox_message
Reverse a rejection: clears `rejectedAt`, `rejectedByUserId` and the stored reason, putting the contact back in the review queue. This does NOT approve the lead — `readyForCampaign` is reset to false, so the contact still needs to be accepted (e.g. with `update_contact` setting `readyForCampaign` to true) before it is picked up by a campaign. Because `readyForCampaign` is always reset, calling this on an approved contact moves it back to the review queue.
unreject_contact
Update a campaign's name, associated list IDs, and/or the MESSAGES of its steps. IMPORTANT — this tool edits the messages inside existing steps, NOT the steps themselves: - Steps CANNOT be added, removed, or reordered. If `steps` is provided, it must contain exactly the same number of steps, in the same order, with the same `type` values as the existing campaign (the API rejects the update otherwise). The current steps array is returned by `get_campaign`; only the message fields of that array should be edited. - Only the message content (`message`, `subject`, `note`) and `messageMode` of each step are applied; other step settings (delays, attachments, etc.) are left unchanged. `messageMode` (for `message` and `email` steps only): - `same` — every contact receives the same content; the message body is required (`message`, plus `subject` for email steps). - `ai` — no message content needed; Gojiberry generates a contextual, personalized message per contact.
update_campaign
Update an existing contact's fields. Only provided fields will be changed.
update_contact
Update a source agent's configuration, including its ICP (job titles, industries, company sizes, locations, etc.) — the ICP lives on the source agent.
update_agent
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Gojiberry alternatives on ChatGPT?
As of 2026-09-13, Gojiberry competes with AI Leads Scout, AI Vibe Prospecting, Apollo.io, Canonical Company Search, Clay, Crustdata, Data247, DataForB2B, DayOneLead, Demandbase, Enginy, Firmable, FullEnrich, Grata, Happenstance, HG Insights - RGI, Hunter, Icebreaker, Lusha, Meticulate, Moody's Growth and Strategy, Popl, Reverse Contact, RocketReach, SciLeads, Seamless, SignalHire, Sixtyfour Intelligence, Sprouts Data Intelligence, StoreInspect, Sumble, Super Carl, The Org, ZoomInfo in ChatGPT B2B Prospecting & Contact Data, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.