upapi-io Search API

The Search API from upapi-io — 4 operation(s) for search.

Operations 4

POST /google-autocomplete.post Google Autocomplete #
POST /google-search.post Google Search #
POST /linkedin-profile-search.post LinkedIn Profile Search #
POST /web-search.post Web Search #

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/upapi-io:upapi-io-search-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

upapi-io-search-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: up Search API
  description: 'Browser-powered API marketplace. 103 of 103 APIs included (capped at 449 for RapidAPI compatibility).


    Billing: a call spends WEIGHTED UNITS against your plan''s monthly quota — not a flat one call = one unit. A light HTTP relay costs 1 unit; heavy work costs more, up to 25 (search-engine result pages 25, headless-browser renders and page scrapes 20, residential-proxy social reads 15, LLM completions 10, datacenter social/media reads 4). Every operation declares its own price as `x-upapi-unit-weight`, so a workload can be costed before it is run. Quota state rides on every response in the `RateLimit` / `RateLimit-Policy` headers.'
  version: 1.0.0
servers:
- url: https://api.upapi.io
security:
- ApiKeyAuth: []
tags:
- name: Search
paths:
  /google-autocomplete.post:
    post:
      operationId: google_autocomplete_post
      summary: Google Autocomplete
      description: Real Google search suggestions (autocomplete/suggest) via pure HTTP — no browser, no CAPTCHA. Set expand=true to mine long-tail keywords.
      tags:
      - Search
      x-upapi-unit-weight: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - query
              properties:
                query:
                  type: string
                  title: Query
                  minLength: 1
                  description: Seed query to autocomplete
                client:
                  type: string
                  title: Client
                  default: chrome
                  description: '''chrome'' (rich: relevance+type) or ''firefox'' (simple)'
                expand:
                  type: boolean
                  title: Expand
                  default: false
                  description: Also query '{query} a..z' to mine long-tail suggestions
                country:
                  type: string
                  title: Country
                  default: us
                  description: gl param (e.g. us, ca, gb)
                language:
                  type: string
                  title: Language
                  default: en
                  description: hl param (e.g. en, fr, es)
                proxyUrl:
                  title: Proxyurl
                  default: null
                  description: Optional proxy URL
                  type:
                  - string
                  - 'null'
                maxSuggestions:
                  type: integer
                  title: Maxsuggestions
                  default: 50
                  maximum: 200
                  minimum: 1
                  description: Max suggestions to return
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - success
                - query
                - suggestions
                - count
                - message
                - fetchedAt
                - elapsedMs
                properties:
                  count:
                    type: integer
                    title: Count
                  query:
                    type: string
                    title: Query
                  message:
                    type: string
                    title: Message
                  success:
                    type: boolean
                    title: Success
                  elapsedMs:
                    type: integer
                    title: Elapsedms
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  suggestions:
                    type: array
                    items:
                      type: object
                      title: SuggestionItem
                      required:
                      - text
                      properties:
                        kind:
                          title: Kind
                          default: null
                          type:
                          - string
                          - 'null'
                        text:
                          type: string
                          title: Text
                        relevance:
                          title: Relevance
                          default: null
                          type:
                          - integer
                          - 'null'
                    title: Suggestions
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /google-search.post:
    post:
      operationId: google_search_post
      summary: Google Search
      description: Search Google and get organic results (title, URL, snippet, domain) for any query, with language and country control. For query suggestions use google-autocomplete.post; for a lighter general web search use web-search.post.
      tags:
      - Search
      x-upapi-unit-weight: 6
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - query
              properties:
                query:
                  type: string
                  title: Query
                  minLength: 1
                  description: Search query
                country:
                  type: string
                  title: Country
                  default: us
                  description: gl param (e.g. us, ca, gb)
                language:
                  type: string
                  title: Language
                  default: en
                  description: hl param (e.g. en, fr, es)
                proxyUrl:
                  title: Proxyurl
                  default: null
                  description: Optional proxy URL (http://user:pass@host:port). If set, uses only this exit IP for the BotGuard mint + scrape.
                  type:
                  - string
                  - 'null'
                maxResults:
                  type: integer
                  title: Maxresults
                  default: 10
                  maximum: 100
                  minimum: 1
                  description: Max results to return
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - success
                - query
                - results
                - totalResults
                - message
                - fetchedAt
                - elapsedMs
                properties:
                  query:
                    type: string
                    title: Query
                  source:
                    type: string
                    title: Source
                    default: google
                  message:
                    type: string
                    title: Message
                  results:
                    type: array
                    items:
                      type: object
                      title: ResultItem
                      required:
                      - position
                      - title
                      - url
                      - snippet
                      - domain
                      properties:
                        url:
                          type: string
                          title: Url
                        title:
                          type: string
                          title: Title
                        domain:
                          type: string
                          title: Domain
                        snippet:
                          type: string
                          title: Snippet
                        position:
                          type: integer
                          title: Position
                    title: Results
                  success:
                    type: boolean
                    title: Success
                  elapsedMs:
                    type: integer
                    title: Elapsedms
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  totalResults:
                    type: integer
                    title: Totalresults
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /linkedin-profile-search.post:
    post:
      operationId: linkedin_profile_search_post
      summary: LinkedIn Profile Search
      description: Find LinkedIn profiles by job title and location. Returns name, headline, and profile URL. Web-search backed — no login required.
      tags:
      - Search
      x-upapi-unit-weight: 15
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - keyword
              properties:
                keyword:
                  type: string
                  title: Keyword
                  minLength: 1
                  description: Job title or skill to search (e.g. 'Data Engineer')
                location:
                  title: Location
                  default: null
                  description: Location filter (e.g. 'Tunisia', 'New York')
                  type:
                  - string
                  - 'null'
                proxyUrl:
                  title: Proxyurl
                  default: null
                  description: Residential exit to route the web search through (DDG blocks datacenter IPs). Falls back to the DDGS_PROXY env var.
                  type:
                  - string
                  - 'null'
                maxResults:
                  type: integer
                  title: Maxresults
                  default: 50
                  maximum: 100
                  minimum: 1
                  description: Max profiles to return
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - success
                - keyword
                - location
                - profiles
                - totalFound
                - query
                - message
                - fetchedAt
                - elapsedMs
                properties:
                  query:
                    type: string
                    title: Query
                  keyword:
                    type: string
                    title: Keyword
                  message:
                    type: string
                    title: Message
                  success:
                    type: boolean
                    title: Success
                  location:
                    title: Location
                    type:
                    - string
                    - 'null'
                  profiles:
                    type: array
                    items:
                      type: object
                      title: LinkedInProfile
                      required:
                      - position
                      - name
                      - headline
                      - url
                      - linkedinPath
                      properties:
                        url:
                          type: string
                          title: Url
                        name:
                          type: string
                          title: Name
                        headline:
                          type: string
                          title: Headline
                        position:
                          type: integer
                          title: Position
                        linkedinPath:
                          type: string
                          title: Linkedinpath
                    title: Profiles
                  elapsedMs:
                    type: integer
                    title: Elapsedms
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  totalFound:
                    type: integer
                    title: Totalfound
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /web-search.post:
    post:
      operationId: web_search_post
      summary: Web Search
      description: Search the web and get structured results (titles, URLs, snippets). DuckDuckGo-backed — no browser, no CAPTCHA, fast.
      tags:
      - Search
      x-upapi-unit-weight: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - query
              properties:
                query:
                  type: string
                  title: Query
                  minLength: 1
                  description: Search query
                region:
                  type: string
                  title: Region
                  default: wt-wt
                  description: Region code (wt-wt=global, us-en, uk-en, etc)
                maxResults:
                  type: integer
                  title: Maxresults
                  default: 20
                  maximum: 100
                  minimum: 1
                  description: Max results to return
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - success
                - query
                - results
                - totalResults
                - message
                - fetchedAt
                - elapsedMs
                properties:
                  query:
                    type: string
                    title: Query
                  message:
                    type: string
                    title: Message
                  results:
                    type: array
                    items:
                      type: object
                      title: ResultItem
                      required:
                      - position
                      - title
                      - url
                      - snippet
                      - domain
                      properties:
                        url:
                          type: string
                          title: Url
                        title:
                          type: string
                          title: Title
                        domain:
                          type: string
                          title: Domain
                        snippet:
                          type: string
                          title: Snippet
                        position:
                          type: integer
                          title: Position
                    title: Results
                  success:
                    type: boolean
                    title: Success
                  elapsedMs:
                    type: integer
                    title: Elapsedms
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  totalResults:
                    type: integer
                    title: Totalresults
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
            message:
              type: string
            functionId:
              type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key