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

# Fetch results from an AI Finder preview

> **What it does.** Returns a page of the actual matching records the provider search produced for a cached `previewId` — i.e. the contacts or companies the filters matched. This is what the web UI displays under the preview. No data is persisted; every call is a live provider API request.

**When to use.** Call this after a preview has been created (or iterated) when you want to inspect the concrete records before committing to an import, or when you just need a quick lookup of a few results without the full import pipeline.

**Pagination.** 1-indexed `page` (default 1, max 50) plus `pageSize` (default 10, max 25). Providers generally cap their per-request page size at 25, so `pageSize` is bounded accordingly. Where a provider only supports cursor-based pagination (Crunchbase), this endpoint walks forward from page 1 behind the scenes, so deep pages make several upstream calls — stay within the first 10 pages for Crunchbase or you will receive a 422.

**Provider support.**
- `CRUNCHBASE_COMPANIES`, `CRUNCHBASE_CONTACTS`, `CRUNCHBASE_INVESTORS` — paginated via Crunchbase `after_id` cursor walks. Capped at 10 pages.
- `STORELEADS` — paginated via StoreLeads native page/page_size params.
- `LINKEDIN`, `CRM_CONTACTS`, `CRM_COMPANIES`, `GOOGLE_MAPS`, `THEIRSTACK_TECHNOLOGY`, `THEIRSTACK_JOBS` — supported inline. Provider-specific page ceilings still apply, and some providers may omit `totalCount` when the upstream API does not expose it.

**What you get back.** `records` is a normalized list with optional `id`, `name`, `domain`, `linkedinUrl`, `title`, `location`, and an `extra` bag of provider-specific fields. Which fields are populated depends on the provider (e.g. `title` is only set for contact/person providers). `totalCount` is populated when the provider exposes a total; otherwise rely on `hasNextPage` to know if another page is available.

    > **Required scope:** `ACTIONS_WRITE`
    >
    > **Rate limit:** 100 requests per minute



## OpenAPI

````yaml https://openapi.enginy.ai/definitions.json get /v1/ai-finder/previews/{previewId}/results
openapi: 3.1.0
info:
  title: Enginy API
  version: 1.0.0
  description: Public API for Enginy platform
servers:
  - url: https://openapi.enginy.ai
    description: Configured server
security: []
tags:
  - name: AI Variables
    description: >-
      Manage AI variables and discover the entity fields you can reference in
      prompts and entity requests.
  - name: Inbox
    description: >-
      Inbox endpoints for listing contact threads, reading thread messages,
      managing tags, and sending manual replies.
  - name: Workflows
    description: >-
      Build, validate, publish, run, and inspect advanced (graph) workflows,
      plus the block/condition catalog needed to author a workflow plan.
paths:
  /v1/ai-finder/previews/{previewId}/results:
    get:
      tags:
        - AI Finder
      summary: Fetch results from an AI Finder preview
      description: >-
        **What it does.** Returns a page of the actual matching records the
        provider search produced for a cached `previewId` — i.e. the contacts or
        companies the filters matched. This is what the web UI displays under
        the preview. No data is persisted; every call is a live provider API
        request.


        **When to use.** Call this after a preview has been created (or
        iterated) when you want to inspect the concrete records before
        committing to an import, or when you just need a quick lookup of a few
        results without the full import pipeline.


        **Pagination.** 1-indexed `page` (default 1, max 50) plus `pageSize`
        (default 10, max 25). Providers generally cap their per-request page
        size at 25, so `pageSize` is bounded accordingly. Where a provider only
        supports cursor-based pagination (Crunchbase), this endpoint walks
        forward from page 1 behind the scenes, so deep pages make several
        upstream calls — stay within the first 10 pages for Crunchbase or you
        will receive a 422.


        **Provider support.**

        - `CRUNCHBASE_COMPANIES`, `CRUNCHBASE_CONTACTS`, `CRUNCHBASE_INVESTORS`
        — paginated via Crunchbase `after_id` cursor walks. Capped at 10 pages.

        - `STORELEADS` — paginated via StoreLeads native page/page_size params.

        - `LINKEDIN`, `CRM_CONTACTS`, `CRM_COMPANIES`, `GOOGLE_MAPS`,
        `THEIRSTACK_TECHNOLOGY`, `THEIRSTACK_JOBS` — supported inline.
        Provider-specific page ceilings still apply, and some providers may omit
        `totalCount` when the upstream API does not expose it.


        **What you get back.** `records` is a normalized list with optional
        `id`, `name`, `domain`, `linkedinUrl`, `title`, `location`, and an
        `extra` bag of provider-specific fields. Which fields are populated
        depends on the provider (e.g. `title` is only set for contact/person
        providers). `totalCount` is populated when the provider exposes a total;
        otherwise rely on `hasNextPage` to know if another page is available.

            > **Required scope:** `ACTIONS_WRITE`
            >
            > **Rate limit:** 100 requests per minute
      parameters:
        - schema:
            type: string
            description: The previewId returned by a prior preview or iterate call.
          required: true
          description: The previewId returned by a prior preview or iterate call.
          name: previewId
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 1
            description: 1-indexed page number. Max 50 pages. Defaults to 1.
          required: false
          description: 1-indexed page number. Max 50 pages. Defaults to 1.
          name: page
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 25
            default: 10
            description: >-
              Records per page. Default 10, max 25 (providers typically cap at
              25 per request).
          required: false
          description: >-
            Records per page. Default 10, max 25 (providers typically cap at 25
            per request).
          name: pageSize
          in: query
      responses:
        '200':
          description: Preview results page
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      previewId:
                        type: string
                        format: uuid
                      entity:
                        type: string
                        enum:
                          - CONTACT
                          - COMPANY
                      page:
                        type: number
                      pageSize:
                        type: number
                      totalCount:
                        type: number
                      hasNextPage:
                        type: boolean
                      records:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                            domain:
                              type: string
                            linkedinUrl:
                              type: string
                            title:
                              type: string
                            location:
                              type: string
                            imageUrl:
                              type: string
                              description: >-
                                Profile or company logo image URL, when
                                available.
                            extra:
                              type: object
                              additionalProperties: {}
                          description: >-
                            One matching record from the preview. Fields
                            populated depend on the provider.
                      resolvedProvider:
                        type: string
                      result: {}
                      userInput:
                        type: string
                    required:
                      - previewId
                      - page
                      - pageSize
                      - hasNextPage
                      - records
                required:
                  - status
                  - message
                  - data
        '400':
          description: Validation error (e.g. page out of range)
        '404':
          description: Preview not found or expired
        '422':
          description: >-
            Page is beyond the provider-supported range (e.g. Crunchbase caps
            inline pagination at 10 pages).
        '501':
          description: Provider doesn't support inline pagination for this preview kind.
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````