JobsPipe Companies API

The Companies API from JobsPipe — 3 operation(s) for companies.

Operations 3

GET /v1/companies/{key} Look up one company #
POST /v1/companies/search Search companies by technology (beta) #
GET /v1/companies/{key}/technologies A company's tech stack from its job postings (beta) #

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/jobspipe-companies-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

jobspipe-companies-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: JobsPipe Companies API
  version: 1.0.0
  description: JobsPipe is a unified data API over public job and technographic sources.
  contact:
    name: JobsPipe
    url: https://jobspipe.dev
    email: support@jobspipe.dev
servers:
- url: https://api.jobspipe.dev
security:
- apiKey: []
tags:
- name: Companies
paths:
  /v1/companies/{key}:
    get:
      operationId: getCompany
      summary: Look up one company
      x-consequence: read-only
      x-side-effects: consumes 1 credit
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: 'Returns the enriched record for a single company: domain, website, logo, headcount, headquarters, description, LinkedIn page and founding year. The key may be a domain (stripe.com), a careers URL (https://careers.walmart.com/jobs), an email (andrew@stripe.com) or a company name (Stripe); a domain is matched on its registrable form, so a careers subdomain resolves to the same company as its root domain. Costs one credit per call. A company only appears here once it has been resolved from a job posting, so companies that have never posted a job are absent.'
      parameters:
      - name: key
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 253
        description: 'Company domain, careers URL, email, or name. Example: "stripe.com".'
      responses:
        '200':
          description: The company record.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyObject'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Monthly request quota exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No company matched the key, or the match was not confident enough to return.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Per-second rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
      tags:
      - Companies
  /v1/companies/search:
    post:
      operationId: searchCompaniesByTechnology
      summary: Search companies by technology (beta)
      tags:
      - Companies
      x-consequence: read-only
      x-side-effects: consumes 1 credit per company returned that the account has not already paid for this calendar month
      x-beta: true
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Companies whose own job postings show they use the technologies asked for, with graded evidence per technology. Filter and field names follow the TheirStack company search, so an existing integration can switch by changing the base URL. Each technology carries a tier (confirmed, likely, mentioned; mapped to confidence high, medium, low), posting counts over 7, 30 and 180 days and overall, the first and last date a posting named it, and the share of the company's postings that name it. A domain, website and logo are returned only where two independent sources agree on the company's domain.
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanySearchRequest'
            example:
              company_technology_slug_and:
              - snowflake
              - dbt
              company_country_code_or:
              - DE
              tier_min: likely
              limit: 25
      responses:
        '200':
          description: A page of companies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanySearchResponse'
        '400':
          description: Invalid filters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Monthly request quota exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found, or the beta is not enabled for this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Per-second rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
  /v1/companies/{key}/technologies:
    get:
      operationId: getCompanyTechnologies
      summary: A company's tech stack from its job postings (beta)
      tags:
      - Companies
      x-consequence: read-only
      x-side-effects: consumes 1 credit
      x-beta: true
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Every technology one company's job postings name, graded by evidence tier, with counts and first and last dates. The key may be a domain or a company name. Costs one credit per call.
      parameters:
      - name: key
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 253
        description: 'Company domain or name. Example: "stripe.com".'
      - name: tier_min
        in: query
        required: false
        schema:
          type: string
          enum:
          - confirmed
          - likely
          - mentioned
          default: likely
        description: 'Weakest evidence tier that counts. confirmed: two independent checks agree on at least one posting. likely: a required-strength mention or two postings. mentioned: a single mention.'
      - name: kind
        in: query
        required: false
        schema:
          type: string
        description: Comma-separated kinds to keep, e.g. "product" or "product,certification".
      responses:
        '200':
          description: OK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyTechnologiesResponse'
        '400':
          description: Invalid filters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Monthly request quota exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found, or the beta is not enabled for this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Per-second rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: 'Human-readable error message, e.g. "Invalid search filters: unknown filter: ''query''. Did you mean query -> job_title_or?". Not a stable machine-readable code; match on the HTTP status instead. A few stack-scan errors carry a short identifier such as missing_domain or invalid_domain.'
        message:
          type: string
          description: Additional detail. Present on 402 quota responses; other errors carry only error.
    CompanySearchResponse:
      type: object
      properties:
        metadata:
          type: object
          properties:
            total_results:
              type: integer
            total_companies:
              type: integer
            truncated_results:
              type: integer
            truncated_companies:
              type: integer
            credits_charged:
              type: integer
            companies_already_paid:
              type: integer
            credits_remaining:
              type: integer
              description: Credits the account can still spend after this call. Absent for callers that are not metered.
            credits_allowance:
              type: integer
              description: 'What credits_remaining is measured against: the monthly allowance, or Free''s one-time grant.'
            next_cursor:
              type: string
              nullable: true
            as_of:
              type: string
              nullable: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/TechCompany'
    TechnologyFound:
      type: object
      properties:
        technology:
          $ref: '#/components/schemas/Technology'
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
          description: high = confirmed, medium = likely, low = mentioned.
        tier:
          type: string
          enum:
          - confirmed
          - likely
          - mentioned
        jobs:
          type: integer
          description: Postings that name the technology.
        jobs_last_7_days:
          type: integer
        jobs_last_30_days:
          type: integer
        jobs_last_180_days:
          type: integer
        first_date_found:
          type: string
          format: date
          nullable: true
        last_date_found:
          type: string
          format: date
          nullable: true
        rank_within_category:
          type: integer
          nullable: true
        relative_occurrence_within_category:
          type: number
          nullable: true
        required_jobs:
          type: integer
        preferred_jobs:
          type: integer
        mentioned_jobs:
          type: integer
        recency:
          type: string
          enum:
          - active
          - fading
          - historical
        share:
          type: number
          nullable: true
          description: Share of the company's postings that name the technology.
        occupations:
          type: array
          items:
            type: string
          description: ISCO-08 codes of the roles that name it.
        countries:
          type: array
          items:
            type: string
    RateLimitErrorResponse:
      type: object
      required:
      - error
      description: 'Sent with HTTP 429 when the per-second rate limit is exceeded. The response also carries Retry-After: 1 and the RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers. A 429 costs no credit.'
      properties:
        error:
          type: string
          description: 'Human-readable message: "Rate limit exceeded".'
    CompanyTechnologiesResponse:
      type: object
      properties:
        as_of:
          type: string
          nullable: true
        company:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
              nullable: true
            domain:
              type: string
              nullable: true
            url:
              type: string
              nullable: true
            logo:
              type: string
              nullable: true
            linkedin_url:
              type: string
              nullable: true
        num_jobs:
          type: integer
        num_technologies:
          type: integer
        data:
          type: array
          items:
            $ref: '#/components/schemas/TechnologyFound'
    TechCompany:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
        domain:
          type: string
          nullable: true
        url:
          type: string
          nullable: true
        logo:
          type: string
          nullable: true
        country_code:
          type: string
          nullable: true
        employee_count:
          type: integer
          nullable: true
        employee_count_range:
          type: string
          nullable: true
        founded_year:
          type: integer
          nullable: true
        annual_revenue_usd:
          type: number
          nullable: true
        industry:
          type: string
          nullable: true
        linkedin_url:
          type: string
          nullable: true
        num_jobs:
          type: integer
        num_jobs_found:
          type: integer
        num_jobs_last_30_days:
          type: integer
        num_technologies:
          type: integer
        technology_slugs:
          type: array
          items:
            type: string
        technology_names:
          type: array
          items:
            type: string
        technologies_found:
          type: array
          items:
            $ref: '#/components/schemas/TechnologyFound'
    CompanyObject:
      type: object
      description: Structured details about the hiring company. Every field is independently optional.
      properties:
        name:
          type:
          - string
          - 'null'
        domain:
          type:
          - string
          - 'null'
          description: Bare website host, e.g. stripe.com.
        url:
          type:
          - string
          - 'null'
          description: Company website.
        logo:
          type:
          - string
          - 'null'
        employee_count:
          type:
          - integer
          - 'null'
          description: Headcount from the company's public profile or, failing that, from the employer's business record, which may be an estimate.
        employee_count_min:
          type:
          - integer
          - 'null'
          description: Lower bound on headcount, when only a size band is known (e.g. 10000 for a "10,000+" company). Present for many companies that have no exact count.
        linkedin_url:
          type:
          - string
          - 'null'
        description:
          type:
          - string
          - 'null'
        location:
          type:
          - object
          - 'null'
          description: Company headquarters.
          properties:
            street:
              type:
              - string
              - 'null'
            city:
              type:
              - string
              - 'null'
            region:
              type:
              - string
              - 'null'
            postal_code:
              type:
              - string
              - 'null'
            country:
              type:
              - string
              - 'null'
        founded:
          type:
          - string
          - 'null'
          description: Year the company was founded, where known.
        intelligence:
          type:
          - object
          - 'null'
          description: Revenue, legal identity and entity type of the employer, resolved for the posting's company in the posting's country. Null when no record exists or the record holds no finding, and always null on GET /v1/companies/{key}, which has no posting country to resolve against. Every field inside is independently null when it is not known.
          properties:
            revenue_usd:
              type:
              - number
              - 'null'
              description: Most recent known annual revenue, converted to US dollars. Null when no figure is known.
            revenue_year:
              type:
              - integer
              - 'null'
              description: Fiscal year the revenue figure refers to.
            revenue_source:
              type:
              - string
              - 'null'
              description: Short identifier of where the revenue figure came from, such as a business register, a securities filing or a company directory.
            revenue_confidence:
              type:
              - string
              - 'null'
              enum:
              - filed
              - reported
              - band
              - derived
              - extracted
              - null
              description: 'How the revenue figure was obtained, strongest first: filed = taken from the company''s statutory accounts; reported = stated by the company itself; band = only an estimated range is known; revenue_usd is a representative figure within it; derived = estimated from funding or valuation; extracted = read from public text about the company.'
            entity_kind:
              type:
              - string
              - 'null'
              description: 'What kind of organisation the employer is: company, branch, public_sector or staffing_agency.'
            founded_year:
              type:
              - integer
              - 'null'
              description: Year the legal entity was founded or registered.
            headcount:
              type:
              - integer
              - 'null'
              description: Employee count as filed, registered or listed in a company directory. Can differ from employee_count, which comes from the company's public profile.
            industry:
              type:
              - string
              - 'null'
              description: Industry as recorded for the legal entity or, where no record exists, the industry a company directory lists.
            hq_region:
              type:
              - string
              - 'null'
              description: Region or state of the employer's headquarters, as written by the source (for example California), when known.
            hq_city:
              type:
              - string
              - 'null'
              description: City of the employer's headquarters, when known.
            revenue_low_usd:
              type:
              - number
              - 'null'
              description: 'Lower bound of the revenue, in US dollars: the range behind the figure when the source gave one; null otherwise.'
            revenue_high_usd:
              type:
              - number
              - 'null'
              description: 'Upper bound of the revenue, in US dollars: the range behind the figure when the source gave one; null otherwise.'
            headcount_low:
              type:
              - integer
              - 'null'
              description: 'Lower bound of the headcount: the range behind the figure when the source gave one; null otherwise.'
            headcount_high:
              type:
              - integer
              - 'null'
              description: 'Upper bound of the headcount: the range behind the figure when the source gave one; null otherwise.'
            lei:
              type:
              - string
              - 'null'
              description: Legal Entity Identifier (ISO 17442), 20 characters.
    Technology:
      type: object
      properties:
        slug:
          type: string
        name:
          type: string
        category:
          type: string
          nullable: true
        category_slug:
          type: string
          nullable: true
        parent_category:
          type: string
          nullable: true
        kind:
          type: string
          nullable: true
          description: product, methodology, certification or standard.
        logo:
          type: string
          nullable: true
    CompanySearchRequest:
      type: object
      additionalProperties: false
      properties:
        company_technology_slug_or:
          type: array
          items:
            type: string
          maxItems: 10
        company_technology_slug_and:
          type: array
          items:
            type: string
          maxItems: 10
        company_technology_slug_not:
          type: array
          items:
            type: string
          maxItems: 10
        expand_technology_slugs:
          type: array
          items:
            type: string
          maxItems: 10
        min_num_jobs_found:
          type: integer
          minimum: 1
        company_country_code_or:
          type: array
          items:
            type: string
          description: Countries of the postings that name the technology.
        company_domain_or:
          type: array
          items:
            type: string
        company_name_or:
          type: array
          items:
            type: string
        min_employee_count:
          type: integer
          minimum: 0
        max_employee_count:
          type: integer
          minimum: 0
        include_total_results:
          type: boolean
        order_by:
          type: array
          maxItems: 3
          items:
            type: object
            properties:
              field:
                type: string
                enum:
                - num_jobs
                - num_jobs_found
                - num_jobs_last_30_days
                - employee_count
              desc:
                type: boolean
                default: true
            required:
            - field
        limit:
          type: integer
          minimum: 1
          maximum: 1000
          default: 25
        page:
          type: integer
          minimum: 0
        offset:
          type: integer
          minimum: 0
        cursor:
          type: string
        tier_min:
          type: string
          enum:
          - confirmed
          - likely
          - mentioned
          default: likely
        job_filters:
          type: object
          description: Only job_country_code_or and posted_at_max_age_days are applied in the beta; other job filters are accepted and ignored.
          properties:
            job_country_code_or:
              type: array
              items:
                type: string
            posted_at_max_age_days:
              type: integer
              minimum: 1
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
        maxLength: 255
      description: 'Optional client-generated key (e.g. a UUID) that makes this POST safe to retry. A repeat with the same key returns the original response plus an Idempotent-Replayed: true header. Keys are retained for 24 hours.'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'API key issued from the JobsPipe dashboard, prefixed jp_live_, sent as a bearer token in the Authorization header. Keys are read-only and scoped: jobs:read grants POST /v1/jobs/search, stack:read grants POST /v1/stack/scan. No scope grants write access to JobsPipe data.'
    oidc:
      type: openIdConnect
      openIdConnectUrl: https://jobspipe.dev/.well-known/openid-configuration
      description: 'OpenID Connect / OAuth 2.0 access via the JobsPipe authorization server. Supported scopes (also advertised in the protected-resource metadata at https://api.jobspipe.dev/.well-known/oauth-protected-resource): jobs:read - search normalized job postings; stack:read - run technology-stack scans.'
x-service-info:
  categories:
  - data
  - jobs
  - technographics
  docs:
    homepage: https://jobspipe.dev
    apiReference: https://docs.jobspipe.dev
    llms: https://jobspipe.dev/llms.txt