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

# Find companies by tech stack

> Import companies using a given technology stack to your webhook

Import the companies matching a technology-stack query. This is the second
step of the two-step tech-stack search — run
[preview](/api-reference/endpoints/signals/tech_stack_preview) first to size
the segment for free, then extract to receive the full company records on your
webhook. Technographics are powered by TheirStack.

## Credits and rate limits

* Credits: **3 enrichment credits** per imported company
* Authentication: standard v2 scheme (`X-API-KEY`)

Extract is exempt from per-second rate limiting — the credit balance is its own
throttle. If the account lacks enough enrichment credits for the companies that
would be imported, the request returns `401` and no import is created.

## Filters

Accepts the same filters as
[preview](/api-reference/endpoints/signals/tech_stack_preview)
(`stacks`, `stack_match`, `excluded_stacks`, `countries`,
`included_industries`, `excluded_industries`, `company_size`), plus:

* `webhook_url` **(required)** — where results are POSTed
* `limit` — caps how many companies are imported (and billed). Defaults to
  1000, which is also the hard ceiling.
* `streaming` — when `true`, companies are POSTed one at a time instead of in a
  single payload
* `name` — optional import name

Resolve technology names to slugs with the
[Technology slug lookup](/api-reference/endpoints/miscellaneous/technologies)
endpoint.

## Example request

```json theme={null}
{
  "stacks": ["shopify"],
  "stack_match": "and",
  "countries": ["US"],
  "limit": 200,
  "webhook_url": "https://your-company.com/webhooks/stack"
}
```

## Example response

```json theme={null}
{
  "message": {
    "total_count": 200,
    "total_available": 428,
    "message": "Stack intent search started successfully. You will receive the results on your webhook shortly.",
    "id": "b3f1c2d4-0000-0000-0000-000000000000"
  }
}
```

* `total_available` is the full match count; `total_count` is what will be
  imported (capped by `limit`, then the 1000 ceiling).
* When nothing matches, the response is `200` with `{ "total_count": 0, ... }`
  and no import is created.

## Webhook payload

Companies are delivered to your `webhook_url` using the same field names as the
other company imports: `name`, `description`, `website`, `logo`, `industry`,
`location`, `linkedin_id`, `linkedin_url`, `employee_count`, `employee_range`.
Blank fields are omitted.


## OpenAPI

````yaml POST /intents/accounts/stack
openapi: 3.0.1
info:
  title: Pipecorn Accounts API
  description: Pipecorn Accounts API
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://app.pipecorn.com/api/v2/
security:
  - defaultApiKey: []
paths:
  /intents/accounts/stack:
    post:
      summary: Find companies by tech stack
      description: >-
        Start an async import of companies matching a technology-stack query.
        Results are delivered to `webhook_url`. Spends 3 enrichment credits per
        imported company. Only documented fields are allowed; unknown keys
        return 422.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - stacks
                - webhook_url
              properties:
                webhook_url:
                  type: string
                  format: uri
                  description: URL that receives the imported company records.
                  example: https://your-company.com/webhooks/stack
                stacks:
                  type: array
                  items:
                    type: string
                  description: >-
                    Technology slugs to match. Resolve names to slugs with GET
                    /accounts/technologies.
                  example:
                    - shopify
                    - webflow
                stack_match:
                  type: string
                  enum:
                    - or
                    - and
                  default: or
                  description: >-
                    How `stacks` combine. `or` matches companies using any
                    listed technology; `and` requires all of them.
                  example: or
                excluded_stacks:
                  type: array
                  items:
                    type: string
                  description: Technology slugs to exclude.
                  example:
                    - wordpress
                countries:
                  type: array
                  items:
                    type: string
                  description: ISO country codes, OR-matched against the company's country.
                  example:
                    - US
                    - FR
                included_industries:
                  type: array
                  items:
                    type: string
                  description: LinkedIn industry IDs to include, OR-matched.
                  example:
                    - '2190'
                    - '34'
                excluded_industries:
                  type: array
                  items:
                    type: string
                  description: LinkedIn industry IDs to exclude.
                  example:
                    - '27'
                company_size:
                  type: array
                  items:
                    type: string
                    enum:
                      - Self-employed
                      - 1-10
                      - 11-50
                      - 51-200
                      - 201-500
                      - 501-1000
                      - 1001-5000
                      - 5001-10000
                      - 10001+
                  description: Company size display buckets to include.
                  example:
                    - 11-50
                    - 51-200
                limit:
                  type: integer
                  minimum: 1
                  maximum: 1000
                  default: 1000
                  description: >-
                    Caps how many companies are imported (and billed). Defaults
                    to 1000, which is also the hard ceiling.
                  example: 200
                streaming:
                  type: boolean
                  description: >-
                    When true, companies are POSTed to the webhook one at a time
                    instead of in a single payload.
                  example: false
                name:
                  type: string
                  description: Optional import name.
                  example: Shopify prospects
      responses:
        '200':
          description: No matching companies; no import created
          content:
            application/json:
              schema:
                type: object
                required:
                  - total_count
                  - total_available
                  - message
                properties:
                  total_count:
                    type: integer
                    example: 0
                  total_available:
                    type: integer
                    example: 0
                  message:
                    type: string
                    example: No results found
        '201':
          description: Stack intent search started successfully
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                properties:
                  message:
                    type: object
                    required:
                      - total_count
                      - total_available
                      - message
                      - id
                    properties:
                      total_count:
                        type: integer
                        description: >-
                          Companies that will be imported (capped by `limit`,
                          then the 1000 ceiling).
                        example: 200
                      total_available:
                        type: integer
                        description: Full match count.
                        example: 428
                      message:
                        type: string
                        example: >-
                          Stack intent search started successfully. You will
                          receive the results on your webhook shortly.
                      id:
                        type: string
                        format: uuid
                        description: Import job UUID.
                        example: b3f1c2d4-0000-0000-0000-000000000000
        '400':
          description: Bad request (stacks or webhook_url missing)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized (invalid API key or not enough enrichment credits)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Unprocessable entity (invalid filters or unknown parameters)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: integer
          format: int32
        message:
          type: string
  securitySchemes:
    defaultApiKey:
      type: apiKey
      in: header
      name: X-API-KEY

````