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

# Scrape Website

> > **Coming soon.** This endpoint isn't available yet. Calls to it won't work until it launches.

The Website Scraping API fetches a company's homepage and returns it as structured JSON.

Pass a domain such as `acme.com`. A full URL is reduced to its host, so `https://www.acme.com/about` becomes `acme.com`. The homepage is always the page fetched.

**What comes back:**
- Title, description, and Open Graph text
- H1–H3 headings
- Navigation and footer links
- Key pages: contact, about, pricing, careers, demo, blog, docs, privacy, terms, login, and signup. Each is a URL or `null`, never guessed.
- Emails and phone numbers found on the page
- Social profiles
- Detected technologies
- A text excerpt of the visible copy, and counts

It never returns raw HTML or images.

**Use this endpoint to:**
- Qualify accounts from what their website says
- Find contact, pricing, careers, and demo pages
- Detect the technologies a company uses

**Cost:**
Each domain served costs 1 **scrape token**, whether it's fetched now or served from the 30-day cache. Scrape tokens are a separate balance from regular tokens. See `get_billing`.

**Outcomes:**
- A site that blocks the direct fetch may first return `status: "pending"` with `retry_after_seconds`. Ask again after that delay.
- A domain with no data returns HTTP `200` with `status: "not_found"`.
- `pending` and `not_found` cost nothing. Read `status`, not the HTTP code, to tell a hit from a miss.

> [!WARNING]
>
> **Coming soon — not available yet.** This endpoint is documented ahead of launch. Calls to it will fail until it's released.


## OpenAPI

````yaml /openapi.json post /scrape_website
openapi: 3.1.0
info:
  title: MoltSets API
  version: 1.0.0
  description: >-
    MoltSets is an identity resolution API. Use it to resolve emails, LinkedIn
    profiles, and IP addresses into enriched contact and company data, including
    business and personal emails, mobile phone numbers, and firmographic
    details.
servers:
  - url: https://api.moltsets.com/api/v1/tools
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Search
    description: >-
      Search and filter company and business profiles by name, domain, industry,
      size, or revenue.
  - name: Get Valid Emails
    description: Resolve and enrich valid business and personal email addresses.
  - name: Get Carrier-Verified Mobile Phones
    description: Enrich carrier-verified mobile phone numbers.
  - name: Reverse Lookups
    description: Resolve an email address or LinkedIn URL to a full business profile.
  - name: Get Ad Audience
    description: >-
      Resolve identifiers to hashed email (HEM) and mobile advertising IDs
      (MAIDs) for audience matching.
  - name: Get LinkedIn
    description: Resolve an email address to its LinkedIn profile URL.
  - name: Get Company
    description: Resolve IP addresses and domains to company data.
  - name: Account
    description: Account management tools. Free — do not consume credits.
paths:
  /scrape_website:
    post:
      tags:
        - Get Company
      summary: Scrape Website
      description: >-
        > **Coming soon.** This endpoint isn't available yet. Calls to it won't
        work until it launches.


        The Website Scraping API fetches a company's homepage and returns it as
        structured JSON.


        Pass a domain such as `acme.com`. A full URL is reduced to its host, so
        `https://www.acme.com/about` becomes `acme.com`. The homepage is always
        the page fetched.


        **What comes back:**

        - Title, description, and Open Graph text

        - H1–H3 headings

        - Navigation and footer links

        - Key pages: contact, about, pricing, careers, demo, blog, docs,
        privacy, terms, login, and signup. Each is a URL or `null`, never
        guessed.

        - Emails and phone numbers found on the page

        - Social profiles

        - Detected technologies

        - A text excerpt of the visible copy, and counts


        It never returns raw HTML or images.


        **Use this endpoint to:**

        - Qualify accounts from what their website says

        - Find contact, pricing, careers, and demo pages

        - Detect the technologies a company uses


        **Cost:**

        Each domain served costs 1 **scrape token**, whether it's fetched now or
        served from the 30-day cache. Scrape tokens are a separate balance from
        regular tokens. See `get_billing`.


        **Outcomes:**

        - A site that blocks the direct fetch may first return `status:
        "pending"` with `retry_after_seconds`. Ask again after that delay.

        - A domain with no data returns HTTP `200` with `status: "not_found"`.

        - `pending` and `not_found` cost nothing. Read `status`, not the HTTP
        code, to tell a hit from a miss.
      operationId: scrapeWebsite
      parameters:
        - $ref: '#/components/parameters/UserAgentHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - domain
              properties:
                domain:
                  type: string
                  description: >-
                    The company's domain, e.g. `acme.com`. A full URL such as
                    `https://www.acme.com/about` is reduced to `acme.com`. The
                    homepage is fetched.
                  example: acme.com
      responses:
        '200':
          description: >-
            Success — `status` is `ok`, `pending`, or `not_found`. The full
            response schema will be published at launch.
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUnauthorized'
        '402':
          description: Payment Required — insufficient tokens
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInsufficientTokens'
        '403':
          description: >-
            Forbidden — missing `User-Agent` header, tool not on the plan, or
            account inactive
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPlanRestricted'
        '422':
          description: >-
            Invalid Input — malformed body, or a parameter is missing,
            malformed, or outside its allowed values
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInvalidInput'
        '429':
          description: Too Many Requests — rate limit or Fair Use window exhausted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorRateLimit'
        '500':
          description: >-
            Internal Server Error — the call could not complete. Usually the
            endpoint is temporarily unavailable, but an oversized request can
            also cause it. Retry with a smaller request first; the MoltSets team
            is alerted automatically.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInternal'
components:
  parameters:
    UserAgentHeader:
      name: User-Agent
      in: header
      required: true
      description: >-
        Identifies the calling client. Any non-empty value is accepted —
        MoltSets does not validate its contents. Requests without this header
        are rejected with `403 Forbidden` (`error.code`: `forbidden`).
      schema:
        type: string
      example: YOUR_APP_NAME/1.0
  schemas:
    ErrorUnauthorized:
      type: object
      description: The API key or OAuth token is missing, invalid, or revoked.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: unauthorized
            message:
              type: string
              example: Invalid API key.
    ErrorInsufficientTokens:
      type: object
      description: >-
        Out of credit. `insufficient_tokens` means the token balance cannot
        cover the call; `insufficient_phone_tokens` means the phone token
        balance (from the separate phone token subscription) cannot cover a
        mobile-phone result. On a batch, unaffordable items are dropped and the
        response returns partial results with this error block rather than
        failing the whole call.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: insufficient_tokens
            message:
              type: string
              example: You have 0 tokens remaining.
    ErrorPlanRestricted:
      type: object
      description: >-
        The request is refused. `forbidden` means the request has no
        `User-Agent` header — add one (any non-empty value). `plan_restricted`
        means the tool is not part of the account's plan — today, the
        ad-audience tools (`email_to_maid`, `business_email_to_sha256`,
        `linkedin_to_sha256`) on the \$397 and \$997 plans. It is a plan
        condition, so there is no `Retry-After` and topping up tokens does not
        clear it. `account_inactive` means the account itself is not active —
        log in and subscribe to a plan.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: plan_restricted
            message:
              type: string
              example: >-
                Personal email lookups are not available on your plan. Contact
                support@moltsets.com to request access.
    ErrorInvalidInput:
      type: object
      description: >-
        The request body is malformed, or a parameter is missing, malformed, or
        outside its allowed values.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_input
            message:
              type: string
              example: Message describing the nature of the invalid input.
    ErrorRateLimit:
      type: object
      description: >-
        Rate or Fair Use limit. `rate_limited` is the burst/IP guard;
        `fair_use_limit_exceeded` means a Fair Use **record** window is
        exhausted (or, on the free tier, the one-time search trial);
        `fair_use_requests_exceeded` means the 5-hour **request** window is
        exhausted; `search_concurrency_exceeded` means too many `search_people`
        / `search_companies` calls are running at the same time for the plan
        (Free and $27: 3, $97: 5, $397 and $997: 8). The Fair Use codes carry
        `metadata.retry_after` and a `Retry-After` header.
        `search_concurrency_exceeded` carries `Retry-After: 1` — retry after 1
        second and run fewer searches in parallel.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: fair_use_limit_exceeded
            message:
              type: string
              example: Fair use record limit reached. Retry after the window resets.
        metadata:
          type: object
          properties:
            retry_after:
              type: integer
              description: >-
                Seconds until the binding window unlocks. Also sent as a
                `Retry-After` header. Absent when the limit is a plan condition
                rather than a window (free-tier search trial exhausted).
    ErrorInternal:
      type: object
      description: >-
        Returned when the call could not complete — usually because the endpoint
        is unavailable, though an oversized request can also cause it. Retry
        with a smaller request first. Never charged.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: internal_error
            message:
              type: string
              example: Unexpected connection error.
        metadata:
          type: object
          example: {}
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Pass your API key as a Bearer token. Keys follow the format
        `ms_XXXXXXXXXXX`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.