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

# Get Global Ad Library Advertiser Paid Search

> Paid-search market facts for one GLOBAL advertiser identity.

Brand Details' Paid Search read. Scoped to the advertiser, never to a
viewing workspace: paid-search estimates describe a public domain, and
global evidence is independent of tenant projections (BI-D03 / BI-D04).
Until 2026-09-02 this data was only reachable through the ``brand_id``-
scoped dashboard routes, so an advertiser was readable from exactly the one
workspace whose competitor list held its exact domain — 287,645 of 289,054
production (viewing brand, measured advertiser) pairs were locked out of
data that existed.

Read-only and provider-free (BI-D09). Returns ``measured=False`` rather than
404 when no capture exists, so the caller can tell "unmeasured" from
"unknown advertiser".



## OpenAPI

````yaml /openapi.json get /api/v1/ad-library/advertisers/{advertiser_id}/paid-search
openapi: 3.1.0
info:
  title: AITasker
  version: 0.1.0
servers: []
security: []
paths:
  /api/v1/ad-library/advertisers/{advertiser_id}/paid-search:
    get:
      tags:
        - Ad Library
        - Ad Library
      summary: Get Global Ad Library Advertiser Paid Search
      description: >-
        Paid-search market facts for one GLOBAL advertiser identity.


        Brand Details' Paid Search read. Scoped to the advertiser, never to a

        viewing workspace: paid-search estimates describe a public domain, and

        global evidence is independent of tenant projections (BI-D03 / BI-D04).

        Until 2026-09-02 this data was only reachable through the ``brand_id``-

        scoped dashboard routes, so an advertiser was readable from exactly the
        one

        workspace whose competitor list held its exact domain — 287,645 of
        289,054

        production (viewing brand, measured advertiser) pairs were locked out of

        data that existed.


        Read-only and provider-free (BI-D09). Returns ``measured=False`` rather
        than

        404 when no capture exists, so the caller can tell "unmeasured" from

        "unknown advertiser".
      operationId: >-
        get_global_ad_library_advertiser_paid_search_api_v1_ad_library_advertisers__advertiser_id__paid_search_get
      parameters:
        - name: advertiser_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Advertiser Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertiserPaidSearchResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    AdvertiserPaidSearchResponse:
      properties:
        advertiser_id:
          type: string
          format: uuid
          title: Advertiser Id
        measured:
          type: boolean
          title: Measured
        advertiser_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Advertiser Name
        domain:
          anyOf:
            - type: string
            - type: 'null'
          title: Domain
        captured_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Captured At
        creatives_captured_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Creatives Captured At
        location_code:
          anyOf:
            - type: integer
            - type: 'null'
          title: Location Code
        language_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Language Code
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        creatives_location_code:
          anyOf:
            - type: integer
            - type: 'null'
          title: Creatives Location Code
        creatives_language_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Creatives Language Code
        creatives_source:
          anyOf:
            - type: string
            - type: 'null'
          title: Creatives Source
        paid_keyword_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Paid Keyword Count
        est_monthly_spend_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Monthly Spend Usd
        est_paid_traffic:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Paid Traffic
        avg_cpc_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Avg Cpc Usd
        paid_vs_organic_ratio:
          anyOf:
            - type: number
            - type: 'null'
          title: Paid Vs Organic Ratio
        active_ad_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Active Ad Count
        keywords:
          items:
            $ref: '#/components/schemas/KeywordRow'
          type: array
          title: Keywords
        google_ads:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Google Ads
        spend_points:
          items:
            $ref: '#/components/schemas/SpendSeriesPoint'
          type: array
          title: Spend Points
        estimate_notice:
          type: string
          title: Estimate Notice
          default: >-
            Estimated — spend, traffic, CPC, keyword count and active ads are
            all modelled from competitor paid keywords. Not actual competitor
            figures.
      type: object
      required:
        - advertiser_id
        - measured
      title: AdvertiserPaidSearchResponse
      description: >-
        Global paid-search evidence for ONE advertiser identity.


        The Brand Details Paid Search read (vault 25.3: ``advertiser_id`` is the
        key

        for "identity across ads, reviews, profiles, group members, Brand
        Details").

        Keyed by advertiser, never by ``brand_id`` — the tenant axis is
        independent

        of global market facts (BI-D04), so this shape carries no tenant field
        at

        all and cannot be re-scoped to one workspace's competitor list.


        Deliberately WITHOUT ``overlap_keyword_count`` / ``gap_keyword_count`` /

        shared+gap keyword arrays. Those are "capturing brand vs this
        competitor"

        projections; serving another tenant's copy would leak that tenant's
        keyword

        footprint (BI-D03). The exclusion lives in the model so it survives
        edits to

        the service.


        ``measured=False`` means no capture exists for this domain anywhere. It
        is

        NOT the same as a capture that measured zero paid keywords, which
        arrives

        ``measured=True`` with zeroes (BI-D10). Neither state is an error and

        neither is retryable — acquisition is a background/operator path
        (BI-D09).
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    KeywordRow:
      properties:
        keyword:
          type: string
          title: Keyword
        position:
          anyOf:
            - type: integer
            - type: 'null'
          title: Position
        cpc:
          anyOf:
            - type: number
            - type: 'null'
          title: Cpc
        search_volume:
          anyOf:
            - type: integer
            - type: 'null'
          title: Search Volume
        etv:
          anyOf:
            - type: number
            - type: 'null'
          title: Etv
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
        paid:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Paid
      type: object
      required:
        - keyword
      title: KeywordRow
    SpendSeriesPoint:
      properties:
        captured_at:
          type: string
          format: date-time
          title: Captured At
        est_monthly_spend_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Est Monthly Spend Usd
      type: object
      required:
        - captured_at
      title: SpendSeriesPoint
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````