Zenserp Batch API

Asynchronous batch endpoint for very large SERP datasets. Jobs are submitted together and results are POSTed back to a caller-supplied webhook_url, or polled by batch id. Available on the Medium plan and above. Served from the v1 base, not v2.

Operations 3

GET /api/v1/batches Get All Batches #
POST /api/v1/batches Submitting a new Batch #
GET /api/v1/batches/{id} Get Batch By Id #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zenserp-batch-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zenserp-batch-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Zenserp Batch API
  description: Zenserp SERP API.
  version: '2.0'
  contact:
    name: Zenserp Support
    url: https://zenserp.com/
    email: support@zenserp.com
  termsOfService: https://zenserp.com/terms-of-service/
  x-logo:
    url: https://zenserp.com/wp-content/uploads/2019/07/zenserp-logo.png
  x-source: https://app.zenserp.com/documentation (endpoint list decompiled from the docs SPA bundle /js/app.js) + live unauthenticated probes 2026-08-13
servers:
- url: https://app.zenserp.com
  description: Zenserp API host. Search, status and the list endpoints are under /api/v2; batches, trends and shopping product pages are under /api/v1.
security:
- apiKeyHeader: []
- apiKeyQuery: []
tags:
- name: Batch
  description: Batch processing for multiple simultaneous queries.
paths:
  /api/v1/batches:
    get:
      operationId: listBatches
      summary: Get All Batches
      description: This endpoint lists all submitted batches of your apikey.
      tags:
      - Batch
      responses:
        '200':
          description: Array of submitted batches.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BatchResponse'
        '403':
          description: Forbidden -- API key is wrong, you don't have enough requests or you don't have enough rights to access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found -- There were no results found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      operationId: submitBatch
      summary: Submitting a new Batch
      description: Submit a batch of SERP jobs to be fetched asynchronously. Results are POSTed back to webhook_url when the batch completes; polling by id is possible but the webhook notification system is recommended by Zenserp.
      tags:
      - Batch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchRequest'
            example:
              webhook_url: https://example.com/zenserp-callback
              name: nightly-rank-check
              jobs:
              - type: search
                q: pied piper
                location: New York,New York,United States
              - type: search
                q: silicon valley tv show
                gl: US
                hl: en
      responses:
        '200':
          description: Batch accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
        '422':
          description: Validation failed -- one or more request parameters were rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '403':
          description: Forbidden -- API key is wrong, you don't have enough requests or you don't have enough rights to access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found -- There were no results found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/batches/{id}:
    get:
      operationId: getBatch
      summary: Get Batch By Id
      description: This endpoint allows you to check the status of a batch and retrieve it's results. Zenserp highly recommends the webhook notification system over manual polling.
      tags:
      - Batch
      parameters:
      - name: id
        in: path
        required: true
        description: The batch identifier returned when the batch was submitted.
        schema:
          type: string
      responses:
        '200':
          description: Batch information including all available responses.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
        '403':
          description: Forbidden -- API key is wrong, you don't have enough requests or you don't have enough rights to access it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found -- There were no results found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ValidationErrorResponse:
      type: object
      description: Zenserp validation error envelope, documented verbatim in the Error Codes section of the Zenserp documentation.
      properties:
        errors:
          type: array
          description: One object per failing request, keyed by parameter name.
          items:
            type: object
            additionalProperties:
              type: string
      example:
        errors:
        - q: no query specified.
          search_engine: search engine not found.
    BatchRequest:
      type: object
      description: Batch submission body, documented at https://app.zenserp.com/documentation#batches
      required:
      - jobs
      properties:
        webhook_url:
          type: string
          format: uri
          description: optional, string -- The URL where the results will be posted back to.
        name:
          type: string
          description: optional, string -- A name for the batch.
        jobs:
          type: array
          description: required, array -- List of jobs to be done. Each job carries the parameters of the endpoint named by its type.
          minItems: 1
          items:
            type: object
            properties:
              type:
                type: string
                description: 'optional -- Which endpoint to use, default: search.'
                enum:
                - search
                - shopping
                - trends
                default: search
              custom_id:
                type: string
                description: Optional caller-supplied identifier. When submitted it is echoed back in the request object of the webhook response.
              q:
                type: string
              gl:
                type: string
              hl:
                type: string
              location:
                type: string
              num:
                type: integer
              start:
                type: integer
              tbm:
                type: string
              device:
                type: string
              search_engine:
                type: string
    ErrorResponse:
      type: object
      description: 'Zenserp error envelope for request-level failures. Verbatim example from the live API: {"error": "No apikey provided."}'
      properties:
        error:
          type: string
          description: Human-readable error message.
          example: No apikey provided.
    BatchResponse:
      type: object
      description: A submitted batch and, once complete, its job results.
      properties:
        id:
          type: string
          description: Batch identifier.
        name:
          type: string
        status:
          type: string
        webhook_url:
          type: string
          format: uri
        jobs:
          type: array
          description: Job results. Each entry is the response of the corresponding API with an added job_id field.
          items:
            type: object
            additionalProperties: true
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      in: header
      name: apikey
      description: API key passed in the request header.
    apiKeyQuery:
      type: apiKey
      in: query
      name: apikey
      description: API key passed as a query parameter.