> ## Documentation Index
> Fetch the complete documentation index at: https://docs.groovin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Find missing company domains

> Find a company's web domain and save it on the CRM record. Send only a company name to try it out without writing anything.

> [!CAUTION]
>
> With a `crm_company_id`, this writes to your real CRM. Each domain delivered spends one credit, and these credits do not refill. It only fills empty fields. LinkedIn is not touched.

## What this call does

| | |
| - | - |
| **LinkedIn** | None |
| **Your CRM** | Fills empty domain fields only, and only with `crm_company_id`. Can save the company's LinkedIn page with it |
| **Also** | 1 credit per domain delivered. Credits do not refill |
| **Repeating it** | Resend only what is in `not_processed`. A repeated lookup that finds a domain spends a credit again, even by name only. |

## Good to know

* A name-only answer of `resolved` still spends a credit.
* When credits run out, the answer stays a 200: the item says `no_credits` and the rest of the batch is listed in `not_processed`.
* `ambiguous` and `not_found` are normal, spend nothing, and are remembered for up to 30 days. Send a person who works there in your first request.

Your AI assistant reaches the same action through the MCP tool `find_company_domains`.


## OpenAPI

````yaml reference/openapi.json POST /crm/companies/find-domains
openapi: 3.1.0
info:
  title: Groovin API
  version: 1.0.0
  description: >-
    Connect LinkedIn and your CRM. Every call acts on your real LinkedIn account
    and CRM: there is no test mode.
servers:
  - url: https://api.groovin.ai/functions/v1/api/v1
security:
  - apiKey: []
tags:
  - name: LinkedIn
  - name: CRM contacts and companies
  - name: LinkedIn connections import
paths:
  /crm/companies/find-domains:
    post:
      tags:
        - CRM contacts and companies
      summary: Find missing company domains
      description: >-
        Find a company's web domain and save it on the CRM record. Send only a
        company name to try it out without writing anything.
      operationId: find_company_domains
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                companies:
                  type: array
                  minItems: 1
                  maxItems: 25
                  items:
                    type: object
                    properties:
                      crm_company_id:
                        type: string
                        description: >-
                          The CRM company record to fill in, as text. Leave it
                          out to look up a name without writing anything.
                      company_name:
                        type: string
                        description: The company's name. Needed without a `crm_company_id`.
                      contact_first_name:
                        type: string
                        description: >-
                          First name of someone who works there. A person
                          identifies a company far better than its name.
                      contact_last_name:
                        type: string
                        description: Their last name.
                      contact_linkedin_url:
                        type: string
                        description: Their LinkedIn URL. They must work there now.
                      contact_email:
                        type: string
                        description: Their work email. Personal addresses are ignored.
                      country_code:
                        type: string
                        description: >-
                          The company's country, such as `"FR"`. It helps when
                          several companies share a name.
                  description: >-
                    The companies, up to 25 per call. Each needs a
                    `crm_company_id` or a `company_name`.
              required:
                - companies
            examples:
              placeholder:
                summary: Replace every value
                value:
                  companies:
                    - company_name: REPLACE_WITH_COMPANY_NAME
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FindCompanyDomainsResult'
              example:
                total: 1
                processed: 1
                found: 1
                updated: 1
                failed: 0
                not_processed: []
                not_processed_reason: null
                remaining_credits: 199
                retry_guidance: null
                results:
                  - crm_company_id: example-crm-company-id
                    company_name: Example Co
                    outcome: updated
                    domain: example.com
                    source: company_search
                    linkedin_url: null
                    crm_updated: true
                    error: null
                    error_status: null
        '400':
          description: 'Something in the request is wrong: `error` says what.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The API key is missing, wrong or revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Your account cannot do this: no CRM connected, inactive
            subscription, Billing admin role, or a teammate's LinkedIn account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            What you asked for does not exist, or your LinkedIn account is not
            connected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: LinkedIn or your CRM is slowing you down. Wait at least 5 minutes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Something failed on our side.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: >-
            LinkedIn or your CRM could not be reached or gave an unreadable
            answer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    FindCompanyDomainsResult:
      type: object
      description: >-
        The result of a batch. The batch can stop early: send what is in
        `not_processed` again.
      required:
        - total
        - processed
        - found
        - updated
        - failed
        - not_processed
        - not_processed_reason
        - remaining_credits
        - retry_guidance
        - results
      properties:
        total:
          type: integer
          description: Companies asked for, without duplicates.
        processed:
          type: integer
          description: Companies actually handled.
        found:
          type: integer
          description: Domains found.
        updated:
          type: integer
          description: CRM records changed.
        failed:
          type: integer
          description: Lookups that failed.
        not_processed:
          type: array
          items:
            type: string
          description: Companies this call did not start, by id or name.
        not_processed_reason:
          type:
            - string
            - 'null'
          description: Why the batch stopped early, in plain text.
        remaining_credits:
          type: integer
          description: Your domain credits after this call.
        retry_guidance:
          type:
            - string
            - 'null'
          description: >-
            Plain-text advice when some items failed for a temporary reason,
            otherwise `null`. Follow it: it says when to retry, and which items.
        results:
          type: array
          items:
            $ref: '#/components/schemas/CompanyDomainItemResult'
          description: One item per company.
    Error:
      type: object
      description: >-
        What every failed request answers, with an HTTP status. The text can
        change: decide what to do from the status, and show the text to a
        person.
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong, and sometimes what to do next.
    CompanyDomainItemResult:
      type: object
      description: What happened for one company.
      required:
        - crm_company_id
        - company_name
        - outcome
        - domain
        - source
        - linkedin_url
        - crm_updated
        - error
        - error_status
      properties:
        crm_company_id:
          type:
            - string
            - 'null'
          description: The CRM company record, if you sent one.
        company_name:
          type:
            - string
            - 'null'
          description: The company name.
        outcome:
          type: string
          enum:
            - updated
            - resolved
            - already_present
            - not_found
            - ambiguous
            - no_credits
            - failed
          description: >-
            `updated`: found and saved. `resolved`: found, nothing written.
            `ambiguous` and `not_found` are normal answers, not failures.
        domain:
          type:
            - string
            - 'null'
          description: The domain, when there is one.
        source:
          type:
            - string
            - 'null'
          description: >-
            How it was established: `company_search`, `contact_email`,
            `previously_found` or `already_present`.
        linkedin_url:
          type:
            - string
            - 'null'
          description: >-
            The company's LinkedIn page, when known. It is only saved together
            with a domain.
        crm_updated:
          type: boolean
          description: '`true` when the CRM record was changed.'
        error:
          type:
            - string
            - 'null'
          description: >-
            What went wrong for this item, or `null`. Always read it: the rest
            of the batch can still have succeeded.
        error_status:
          type:
            - integer
            - 'null'
          description: >-
            HTTP status behind `error`. `429` means rate limited and `5xx`
            usually means temporary: retry later. `null` when there is no error.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Your Groovin API key (`gv_live_…`), created in the extension under
        Settings, MCP and API.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.