BuiltWith Live Feed API

Real-time WebSocket feed of technology detections as they happen across the web.

AsyncAPI Specification

builtwith-live-feed-asyncapi.yml Raw ↑
# generated: '2026-08-14'
# method: generated
# source: https://api.builtwith.com/live-feed-api and https://api.builtwith.com/llms.txt
# x-provenance: BuiltWith publishes no AsyncAPI document. Every server, channel, command and
#   message field below is transcribed from the provider's own published Live Feed API
#   documentation (channel table, client-command table, message-format samples and
#   message-field table) and the Live Feed section of llms.txt. Nothing here is invented; where
#   the docs do not state a type, the field is left untyped rather than guessed.
asyncapi: 3.0.0
info:
  title: BuiltWith Live Feed API
  version: '1.0.0'
  description: >
    Real-time technology detection notifications over WebSocket. Subscribe to technology
    channels or rule channels and receive an event each time BuiltWith detects a technology on
    a website. Requires an active plan: Basic allows up to 2 technology subscriptions per API
    key, Pro up to 50. Trial and expired accounts receive obfuscated domain names.
  contact:
    name: BuiltWith Support
    email: support@builtwith.com
    url: https://builtwith.com/contact
  externalDocs:
    description: BuiltWith Live Feed API documentation
    url: https://api.builtwith.com/live-feed-api
  license:
    name: Commercial - BuiltWith Terms of Use
    url: https://builtwith.com/terms
  tags:
  - name: Live Feed
    description: Real-time WebSocket technology detections.
  - name: Technology Detection
    description: Notifications emitted when BuiltWith detects a technology on a website.
  x-generated: '2026-08-14'
  x-method: generated
  x-source:
  - https://api.builtwith.com/live-feed-api
  - https://api.builtwith.com/llms.txt
  x-authored-by: API Evangelist enrichment pipeline
  x-provenance-note: >-
    BuiltWith publishes no AsyncAPI document. Every server, channel, command and message field
    here is transcribed from the provider's published Live Feed API documentation; this
    document is an API Evangelist generation, not a provider artifact.
defaultContentType: application/json
servers:
  live:
    host: sync.builtwith.com
    pathname: /wss
    protocol: wss
    description: BuiltWith live detection stream. Automatic reconnection is supported.
    security:
    - $ref: '#/components/securitySchemes/apiKeyQuery'
channels:
  new:
    address: /wss/new
    title: Live feed connection
    description: >
      Connect to the live feed, then send subscribe commands to join channels. Also usable as
      the `new` rule channel - domains new to the pipeline whose technologies were all first
      detected within the last day.
    servers:
    - $ref: '#/servers/live'
    messages:
      connected:
        $ref: '#/components/messages/Connected'
      subscribed:
        $ref: '#/components/messages/Subscribed'
      detection:
        $ref: '#/components/messages/Detection'
      statusChange:
        $ref: '#/components/messages/StatusChange'
      error:
        $ref: '#/components/messages/ErrorMessage'
      command:
        $ref: '#/components/messages/ClientCommand'
  technology:
    address: '/wss/channel/{technology}'
    title: Technology channel
    description: >
      Connect and auto-subscribe to one technology channel. Technology names use dashes in
      place of spaces, for example Shopify, WordPress or Google-Analytics.
    servers:
    - $ref: '#/servers/live'
    parameters:
      technology:
        description: BuiltWith technology name with spaces replaced by dashes.
        examples: [Shopify, WordPress, Google-Analytics]
    messages:
      connected:
        $ref: '#/components/messages/Connected'
      subscribed:
        $ref: '#/components/messages/Subscribed'
      detection:
        $ref: '#/components/messages/Detection'
      statusChange:
        $ref: '#/components/messages/StatusChange'
      error:
        $ref: '#/components/messages/ErrorMessage'
      command:
        $ref: '#/components/messages/ClientCommand'
operations:
  receiveDetections:
    action: receive
    channel:
      $ref: '#/channels/new'
    title: Receive live technology detections
    summary: Server-sent detection, lifecycle and error frames.
    description: >
      Frames the server pushes on an open connection - connection confirmation, subscription
      confirmation, technology detections, view-mode status changes and errors.
    messages:
    - $ref: '#/channels/new/messages/connected'
    - $ref: '#/channels/new/messages/subscribed'
    - $ref: '#/channels/new/messages/detection'
    - $ref: '#/channels/new/messages/statusChange'
    - $ref: '#/channels/new/messages/error'
  sendCommand:
    action: send
    channel:
      $ref: '#/channels/new'
    title: Manage subscriptions
    description: >
      Client-sent JSON commands that join or leave channels and list current subscriptions.
    summary: >
      Send subscribe / unsubscribe / list_subscriptions commands after connecting. Rule
      channels are `new`, `new-historical` and `premium`; any technology name is also a channel.
    messages:
    - $ref: '#/channels/new/messages/command'

  receiveTechnologyDetections:
    action: receive
    channel:
      $ref: '#/channels/technology'
    title: Receive detections for one technology
    summary: Detections for the technology channel joined at connect time.
    description: >
      When connecting to /wss/channel/{technology} the client is auto-subscribed to that
      technology and receives its detection frames without sending a subscribe command.
    messages:
    - $ref: '#/channels/technology/messages/detection'
components:
  securitySchemes:
    apiKeyQuery:
      type: httpApiKey
      name: KEY
      in: query
      description: BuiltWith API key in GUID format, supplied on the WebSocket connect URL.
  messages:
    Connected:
      name: connected
      title: Connection confirmed
      payload:
        $ref: '#/components/schemas/ConnectedPayload'
      examples:
      - name: connected
        payload:
          type: connected
          message: Connected successfully...
          available_commands: [subscribe, unsubscribe, list_subscriptions]
          view_mode: full
    Subscribed:
      name: subscribed
      title: Subscription confirmed
      payload:
        $ref: '#/components/schemas/SubscribedPayload'
      examples:
      - name: subscribed
        payload:
          type: subscribed
          channel: Shopify
          channel_id: a1b2c3d4-...
    Detection:
      name: message
      title: Technology detection
      payload:
        $ref: '#/components/schemas/DetectionPayload'
      examples:
      - name: detection
        payload:
          type: message
          channel: Shopify
          channel_id: a1b2c3d4-...
          data:
            channel_name: Shopify
            website_domain: example.com
            epoch_secs: 1770508800
    StatusChange:
      name: status_change
      title: Subscription level changed
      payload:
        $ref: '#/components/schemas/StatusChangePayload'
      examples:
      - name: upgraded
        payload:
          type: status_change
          view_mode: full
          message: Your subscription has been upgraded. You now have full data access.
    ErrorMessage:
      name: error
      title: Error
      payload:
        $ref: '#/components/schemas/ErrorPayload'
      examples:
      - name: unknown-technology
        payload:
          type: error
          message: Technology 'unknown-tech' not found
    ClientCommand:
      name: command
      title: Client subscription command
      payload:
        $ref: '#/components/schemas/ClientCommandPayload'
      examples:
      - name: subscribe-technology
        payload: {action: subscribe, channel: Shopify}
      - name: subscribe-new
        payload: {action: subscribe, channel: new}
      - name: subscribe-new-historical
        payload: {action: subscribe, channel: new-historical}
      - name: subscribe-premium
        payload: {action: subscribe, channel: premium}
      - name: unsubscribe
        payload: {action: unsubscribe, channel: Shopify}
      - name: list-subscriptions
        payload: {action: list_subscriptions}
  schemas:
    ViewMode:
      type: string
      description: >
        'full' for paid subscribers; redacted (trial/preview) for trial and expired accounts,
        which receive obfuscated domains such as grxxt.cxm instead of great.com.
      enum: [full, 'redacted (trial/preview)']
    ConnectedPayload:
      type: object
      properties:
        type:
          type: string
          const: connected
        message:
          type: string
        available_commands:
          type: array
          items:
            type: string
            enum: [subscribe, unsubscribe, list_subscriptions]
        view_mode:
          $ref: '#/components/schemas/ViewMode'
    SubscribedPayload:
      type: object
      properties:
        type:
          type: string
          enum: [subscribed, unsubscribed]
        channel:
          type: string
          description: Friendly channel name, for example Shopify or new.
        channel_id:
          type: string
          description: Internal channel id - the technology GUID, or 'new' for rule channels.
    DetectionPayload:
      type: object
      properties:
        type:
          type: string
          const: message
        channel:
          type: string
        channel_id:
          type: string
        data:
          type: object
          properties:
            channel_name:
              type: string
            website_domain:
              type: string
              description: Domain where the technology was detected; redacted for trial users.
            epoch_secs:
              type: integer
              description: Unix epoch seconds for when the detection was queued.
    StatusChangePayload:
      type: object
      properties:
        type:
          type: string
          const: status_change
        view_mode:
          $ref: '#/components/schemas/ViewMode'
        message:
          type: string
    ErrorPayload:
      type: object
      properties:
        type:
          type: string
          const: error
        message:
          type: string
    ClientCommandPayload:
      type: object
      required: [action]
      properties:
        action:
          type: string
          enum: [subscribe, unsubscribe, list_subscriptions]
        channel:
          type: string
          description: >
            A rule channel (new, new-historical, premium) or any BuiltWith technology name with
            dashes for spaces. Not used with list_subscriptions.