- Brand
- Gojiberry AI
- 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
- 40
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Gojiberry
Get updates when Gojiberry’s Discoverability Score or category rank changes.
Competing in ChatGPT B2B Prospecting & Contact Data
View Category40 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`). A list on its own does nothing: it needs a source agent to fill it and a campaign agent to contact what lands in it. Creating a list for a source agent without also creating that campaign leaves the sourced leads sitting in the list, never contacted.
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. Campaign membership is driven by list membership, but the link is stored on the LIST: the campaign returned here carries no list reference, so use `list_lists` and keep the lists whose `campaignId` matches this campaign's `id` to know who it reaches out to. 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
Preview the upcoming emails of an email-only campaign (every step is an email, no LinkedIn seat), as shown in the Scheduled tab of the app. For LinkedIn and multi-channel campaigns use `get_campaign_queue` instead — this tool fails on them. Returns one entry per scheduled contact: the `contact`, the `campaign`, the `campaignStep` email to send with its subject and body filled with the contact variables, `lastContactStep` (the last step the contact already received, absent for a contact entering the campaign), `emailSeatId` (the mailbox that will send it, see `list_email_seats`) and `sendAsNewThread` (true when the email starts a new thread instead of replying to the previous one). The queue is capped at the remaining daily sending quota of the campaign's email seats. Preview only: nothing is sent, no new contacts are pulled in, no AI messages are generated and no credits are used. An inactive campaign has an empty queue.
get_campaign_email_queue
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
Preview the upcoming actions of a LinkedIn or multi-channel campaign (one with a LinkedIn seat), as shown in the Scheduled tab of the app. For email-only campaigns use `get_campaign_email_queue` instead — this tool fails on them. Returns one entry per scheduled contact: the `contact`, the `campaign`, the `campaignStep` to run next (invitation, invitationNote, message, voiceMessage, visitProfile, likePosts or email) with its message filled with the contact variables, and `lastContactStep`, the last step the contact already received (absent for a contact entering the campaign). The queue is capped at the LinkedIn seat's full daily quotas (shared between the campaigns on that seat; today's actions are not subtracted) and at the remaining daily quota of the email seats. Preview only: nothing is sent, no new contacts are pulled in, no AI messages are generated and no credits are used. An inactive campaign has an empty queue. Useful for questions like 'what will this campaign send next' or 'who is about to be contacted'.
get_campaign_queue
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 and its `campaignId` — the campaign agent that reaches out to them. Use this to resolve a source agent's `listId` into the campaign behind it: an empty `campaignId` (null or absent) means the list is linked to no campaign, so its contacts receive no outreach.
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), its signals (`variables` — call this before editing them with `update_agent`, which replaces the whole list) 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`) — source agent + list + campaign agent is a Full Cycle agent. To know which campaign outreaches this agent's leads, look its `listId` up by ID with `get_list` and read the list's `campaignId`. An empty `campaignId` (null or absent) means the list is linked to no campaign, so the leads this agent sources are never contacted: tell the user and offer to add the campaign with `create_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. Campaign membership in Gojiberry is driven by list membership, but the link is stored on the LIST, not on the campaign: the campaign objects returned here carry no list reference. To find which lists feed a campaign, call `list_lists` and keep the lists whose `campaignId` matches the campaign's `id`. 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
List the email seats (connected Gmail / Outlook mailboxes) of the authenticated user. Each seat has an `id` (usable in the `emailSeatIds` field of `create_campaign`), the mailbox `email`, sender `name` / `firstName` / `lastName`, `type` ('google' or 'outlook'), sending limits (`dailyEmailMax`, `dailyEmailCount`, `launchHour`, `activeDays`), tracking options (`trackOpening`, `removeUnsubscribeLink`), and warm-up status (`warmupEnabled`, `warmupCompleted`, `warmupStartedAt`). Call this before `create_campaign` when the campaign has `email` steps, to pick the seat(s) that will send them. When impersonating, the seats of the impersonated user are returned.
list_email_seats
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. Each list carries a `campaignId`: the campaign agent that reaches out to its contacts, and the only place that link is stored. When `campaignId` is empty (null or absent), the list is linked to no campaign and its contacts get no outreach — if a source agent imports leads into it (see `list_agents`), those leads are sourced but never contacted, and the Full Cycle setup (list + source agent + campaign agent) is incomplete.
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`). Every source agent is linked to exactly one list (`listId`), and that same list is what a campaign agent reaches out to: list + source agent + campaign agent together form a Full Cycle agent. A source agent whose list is not used by any campaign is a 'legacy agent': it only sources leads, with no outreach. To find out which campaign (if any) outreaches an agent's leads, take the agent's `listId` and look that list up by ID with `get_list`: the list's `campaignId` is the campaign doing the outreach. When that `campaignId` is empty (null or absent), the list is linked to no campaign and the agent's leads are never contacted — offer to complete the setup with `create_campaign`. To check every agent at once, `list_lists` returns the `campaignId` of all lists in one call.
list_agents
Deactivate (pause) a campaign: it leaves the daily outreach scheduling and stops sending new steps. Messages and invitations already sent are NOT retracted, and the campaign, its lists and the contacts' progress are all kept — reactivate it with `activate_campaign` to resume where it left off. This is the safe way to stop a campaign; use it instead of deleting when the user asks to stop, pause, or halt outreach. Returns the resulting campaign state, so `active` on the response confirms the change. Calling this on an already-paused campaign is a no-op. Rate limited to 10 status changes per minute across `activate_campaign` and `pause_campaign`, so pause campaigns one at a time and expect a rate-limit error when stopping more than 10 at once.
pause_campaign
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, ...). This is intended for detailed company research beyond the company information included when revealing a lead. Never call it as a follow-up to `reveal_leads` just to get the leads' companies; that would use the user's credits a second time for data they already have. Revealed companies are returned in the tool response only. They are NOT imported or saved into the Gojiberry account. Credit usage: 0.5 credit from the user's Gojiberry plan per company actually returned (ids that resolve to no document use nothing). Revealing the same id twice uses credits twice, so avoid re-revealing ids you already have. If the remaining credits cannot cover all requested ids, only the first ids that fit are revealed. User confirmation required: never call this tool on your own initiative. Before calling, tell the user how many companies would be revealed and how many credits that uses, and wait for them to confirm. A generic request like 'find me companies' is not a confirmation — only reveal once the user has approved the credit usage. `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 — uses no credits. 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). Use this company directory only when the user explicitly wants detailed company data (description, funding, exact headcount, ...). It is NOT needed to get a lead's company: `reveal_leads` already includes it with no extra credits. Companies searched or revealed here are not imported into the Gojiberry account. 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. This tool CANNOT start or stop a campaign — use `activate_campaign` and `pause_campaign` for that. 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
Gojiberry ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Gojiberry's ChatGPT Plugin 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-10-28, Gojiberry competes with Add to CRM, AdvPulse, AgentData, AI Leads Scout, AI Vibe Prospecting, anVendor, Apollo.io, Bullwhip and 64 more 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.