{
  "openapi": "3.0.1",
  "info": {
    "title": "Brand Protection: Counterfeit, Fake Shop & Typosquat Detector",
    "description": "Find fake webshops, counterfeit marketplace listings, typosquatted domains and impersonation profiles abusing your brand. AI classifies every hit, scores the risk, saves a page snapshot as takedown evidence and tells you which report to file. No API key needed.",
    "version": "0.1",
    "x-build-id": "EgkmIOiGuGQVRRqwx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~brand-abuse-counterfeit-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-brand-abuse-counterfeit-detector",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fayoussef~brand-abuse-counterfeit-detector/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-brand-abuse-counterfeit-detector",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fayoussef~brand-abuse-counterfeit-detector/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-brand-abuse-counterfeit-detector",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "brandName"
        ],
        "properties": {
          "brandName": {
            "title": "Brand name to protect",
            "type": "string",
            "description": "The trademark or brand you want swept for abuse. Use the exact name shoppers search for.\n\n⚡ Unlock full pages and higher limits by subscribing to an [Apify plan](https://apify.com/pricing?fpr=youssef).\n💼 Need a custom solution? Reach out at youssefarhan24@gmail.com\n🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)"
          },
          "officialDomains": {
            "title": "Your official domains",
            "type": "array",
            "description": "Every domain you legitimately own: your shop, your country sites, your brand microsites. These are excluded from the results and are used as the baseline for lookalike domain detection. Add them without https://.",
            "items": {
              "type": "string"
            }
          },
          "checks": {
            "title": "What to look for",
            "type": "array",
            "description": "Pick the abuse types to sweep for. Each one costs candidates, so start with the first two and widen once you see the results.",
            "items": {
              "type": "string",
              "enum": [
                "fake_shops",
                "marketplace_listings",
                "typosquat_domains",
                "social_impersonation"
              ],
              "enumTitles": [
                "Fake webshops and rogue outlet sites",
                "Counterfeit marketplace listings",
                "Typosquatted and lookalike domains",
                "Social media impersonation profiles"
              ]
            },
            "default": [
              "fake_shops",
              "marketplace_listings",
              "typosquat_domains"
            ]
          },
          "productKeywords": {
            "title": "Product lines to focus on",
            "type": "array",
            "description": "Optional. Model names or product lines counterfeiters copy most, for example Wayfarer or Aviator. Each keyword adds a few targeted searches.",
            "items": {
              "type": "string"
            }
          },
          "brandContext": {
            "title": "Notes for the AI reviewer",
            "type": "string",
            "description": "Optional. Anything that helps the AI judge borderline cases: who your authorized retailers are, which regions you sell in, your usual price range, or names that clash with yours."
          },
          "minRiskScore": {
            "title": "Confirm an infringement at risk score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "A hit is only counted and billed as a confirmed infringement at or above this AI risk score. Lower it to catch more, raise it to cut false positives.",
            "default": 60
          },
          "maxCandidates": {
            "title": "Maximum candidates to screen",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Hard cap on how many discovered URLs and domains get AI-screened in one run. This is the main cost control.",
            "default": 120
          },
          "pagesPerQuery": {
            "title": "Search result pages per query",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How deep to read each search. Page 1 holds the sites shoppers actually reach; deeper pages find more but are lower quality.",
            "default": 2
          },
          "domainVariants": {
            "title": "Lookalike domains to generate per official domain",
            "minimum": 0,
            "maximum": 400,
            "type": "integer",
            "description": "Misspellings, character swaps, hyphenations, added words and alternative TLDs are generated from each official domain, then checked for live DNS. Only registered ones cost anything to screen.",
            "default": 120
          },
          "countryCode": {
            "title": "Search from country",
            "type": "string",
            "description": "Two-letter country code the searches run from. Counterfeit storefronts are often targeted by region, so sweep your key markets separately.",
            "default": "us"
          },
          "marketplaces": {
            "title": "Marketplaces to sweep",
            "type": "array",
            "description": "Leave empty to use the built-in list of marketplaces where counterfeits concentrate. Add your own to target a specific platform.",
            "items": {
              "type": "string"
            }
          },
          "socialPlatforms": {
            "title": "Social platforms to sweep",
            "type": "array",
            "description": "Leave empty to use the built-in list. Only used when social media impersonation is enabled.",
            "items": {
              "type": "string"
            }
          },
          "ignoredDomains": {
            "title": "Domains to ignore",
            "type": "array",
            "description": "Domains you never want screened: your authorized retailers, your distributors, press sites you already trust. Major news, encyclopedia and review sites are ignored by default.",
            "items": {
              "type": "string"
            }
          },
          "fetchPages": {
            "title": "Open each candidate page for evidence",
            "type": "boolean",
            "description": "Loads the page so the AI judges the real content, not just a search snippet, and so signals like fake official claims and deep discounts are detected. Turn off for a faster, cheaper, shallower sweep.",
            "default": true
          },
          "saveEvidence": {
            "title": "Save a page snapshot for confirmed infringements",
            "type": "boolean",
            "description": "Stores the raw HTML of every confirmed infringement in the key-value store, so you have dated proof to attach to a takedown notice.",
            "default": true
          },
          "onlyInfringements": {
            "title": "Only output problem results",
            "type": "boolean",
            "description": "Keeps confirmed infringements and grey-area hits in the dataset and drops the clean ones. Screening is still charged for everything checked.",
            "default": false
          },
          "model": {
            "title": "AI model",
            "enum": [
              "anthropic/claude-opus-5-fast",
              "anthropic/claude-opus-5",
              "anthropic/claude-sonnet-5",
              "anthropic/claude-sonnet-5:batch",
              "anthropic/claude-opus-4.8-fast",
              "anthropic/claude-opus-4.8",
              "anthropic/claude-opus-4.8:batch",
              "anthropic/claude-opus-4.7-fast",
              "anthropic/claude-opus-4.7",
              "anthropic/claude-opus-4.7:batch",
              "anthropic/claude-sonnet-4.6",
              "anthropic/claude-opus-4.6",
              "anthropic/claude-opus-4.6:batch",
              "anthropic/claude-opus-4.5",
              "anthropic/claude-opus-4.5:batch",
              "anthropic/claude-haiku-4.5",
              "anthropic/claude-haiku-4.5:batch",
              "anthropic/claude-sonnet-4.5",
              "anthropic/claude-sonnet-4.5:batch",
              "anthropic/claude-opus-4.1",
              "anthropic/claude-opus-4.1:batch",
              "anthropic/claude-opus-4",
              "anthropic/claude-sonnet-4",
              "anthropic/claude-3-haiku",
              "anthropic/claude-fable-5",
              "anthropic/claude-fable-5:batch",
              "google/gemini-3.6-flash",
              "google/gemini-3.6-flash:batch",
              "google/gemini-3.5-flash-lite",
              "google/gemini-3.5-flash-lite:batch",
              "google/gemini-3.5-flash",
              "google/gemini-3.5-flash:batch",
              "google/gemini-3.1-flash-lite",
              "google/gemini-3.1-flash-lite:batch",
              "google/gemini-3.1-flash-lite-preview",
              "google/gemini-3.1-pro-preview-customtools",
              "google/gemini-3.1-pro-preview",
              "google/gemini-3.1-pro-preview:batch",
              "google/gemini-3-flash-preview",
              "google/gemini-3-flash-preview:batch",
              "google/gemini-2.5-flash-lite",
              "google/gemini-2.5-flash-lite:batch",
              "google/gemini-2.5-flash",
              "google/gemini-2.5-flash:batch",
              "google/gemini-2.5-pro",
              "google/gemini-2.5-pro:batch",
              "google/gemini-2.5-pro-preview",
              "google/gemini-2.5-pro-preview-05-06",
              "google/gemma-4-26b-a4b-it",
              "google/gemma-4-31b-it",
              "google/gemma-3n-e4b-it",
              "google/gemma-3-4b-it",
              "google/gemma-3-12b-it",
              "google/gemma-3-27b-it",
              "google/gemma-2-27b-it",
              "google/gemma-4-26b-a4b-it:free",
              "google/gemma-4-31b-it:free",
              "openai/gpt-5.6-luna-pro",
              "openai/gpt-5.6-luna",
              "openai/gpt-5.6-terra-pro",
              "openai/gpt-5.6-terra",
              "openai/gpt-5.6-sol-pro",
              "openai/gpt-5.6-sol",
              "openai/gpt-5.5-pro",
              "openai/gpt-5.5",
              "openai/gpt-5.5:batch",
              "openai/gpt-5.4-nano",
              "openai/gpt-5.4-nano:batch",
              "openai/gpt-5.4-mini",
              "openai/gpt-5.4-mini:batch",
              "openai/gpt-5.4-pro",
              "openai/gpt-5.4",
              "openai/gpt-5.4:batch",
              "openai/gpt-5.3-chat",
              "openai/gpt-5.3-codex",
              "openai/gpt-5.2-codex",
              "openai/gpt-5.2-chat",
              "openai/gpt-5.2-pro",
              "openai/gpt-5.2",
              "openai/gpt-5.2:batch",
              "openai/gpt-5.1-codex-max",
              "openai/gpt-5.1",
              "openai/gpt-5.1:batch",
              "openai/gpt-5.1-chat",
              "openai/gpt-5.1-codex",
              "openai/gpt-5.1-codex-mini",
              "openai/o3-deep-research",
              "openai/o4-mini-deep-research",
              "openai/gpt-5-pro",
              "openai/gpt-5-codex",
              "openai/gpt-5",
              "openai/gpt-5:batch",
              "openai/gpt-5-mini",
              "openai/gpt-5-mini:batch",
              "openai/gpt-5-nano",
              "openai/gpt-5-nano:batch",
              "openai/o3-pro",
              "openai/o4-mini-high",
              "openai/o3",
              "openai/o4-mini",
              "openai/gpt-4.1",
              "openai/gpt-4.1-mini",
              "openai/gpt-4.1-nano",
              "openai/o3-mini-high",
              "openai/o3-mini",
              "openai/gpt-4o-2024-11-20",
              "openai/gpt-4o-2024-08-06",
              "openai/gpt-4o-mini",
              "openai/gpt-4o-mini-2024-07-18",
              "openai/gpt-4o",
              "openai/gpt-4o-2024-05-13",
              "openai/gpt-4-turbo",
              "openai/gpt-4-turbo-preview",
              "openai/gpt-4",
              "openai/gpt-chat-latest",
              "openai/gpt-oss-120b",
              "openai/gpt-oss-20b",
              "openai/o1-pro",
              "openai/o1",
              "openai/gpt-3.5-turbo-0613",
              "openai/gpt-3.5-turbo-instruct",
              "openai/gpt-3.5-turbo-16k",
              "openai/gpt-3.5-turbo",
              "openai/gpt-oss-20b:free",
              "deepseek/deepseek-v3.2",
              "deepseek/deepseek-v3.2-exp",
              "deepseek/deepseek-v3.1-terminus",
              "deepseek/deepseek-chat-v3.1",
              "deepseek/deepseek-r1-0528",
              "deepseek/deepseek-chat-v3-0324",
              "deepseek/deepseek-r1-distill-llama-70b",
              "deepseek/deepseek-r1",
              "deepseek/deepseek-chat",
              "deepseek/deepseek-v4-pro",
              "deepseek/deepseek-v4-flash",
              "x-ai/grok-4.5",
              "x-ai/grok-4.3",
              "x-ai/grok-4.20-multi-agent",
              "x-ai/grok-4.20",
              "x-ai/grok-build-0.1",
              "meta-llama/llama-4-maverick",
              "meta-llama/llama-4-scout",
              "meta-llama/llama-3.3-70b-instruct",
              "meta-llama/llama-3.2-1b-instruct",
              "meta-llama/llama-3.2-3b-instruct",
              "meta-llama/llama-3.1-70b-instruct",
              "meta-llama/llama-3.1-8b-instruct",
              "qwen/qwen3.7-flash",
              "qwen/qwen3.7-plus",
              "qwen/qwen3.7-max"
            ],
            "type": "string",
            "description": "The model that judges each candidate. A cheap fast model is enough for most sweeps. AI usage is billed separately by Apify's model integration, not by this Actor, and the price per million tokens is shown next to each option.",
            "default": "google/gemini-2.5-flash"
          },
          "customModel": {
            "title": "Custom model ID",
            "type": "string",
            "description": "Optional. Overrides the dropdown with any model ID available through the gateway, for example openai/gpt-4.1-mini."
          },
          "openrouterApiKey": {
            "title": "OpenRouter API key",
            "type": "string",
            "description": "Optional. Bring your own OpenRouter key and calls go straight to OpenRouter, billed by them on your own OpenRouter account instead of through Apify. Leave empty to use the built-in access, which needs no key at all."
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "How many candidates are fetched and classified at once. Higher is faster; lower is gentler on the sites being checked.",
            "default": 8
          },
          "maxRetries": {
            "title": "Retries per AI call",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "How many times a failed classification is retried before the candidate is reported as unclassified.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy used to open candidate pages. Residential exits are recommended: fake shops routinely block datacenter traffic. This setting does not affect searching, which always goes through Apify's dedicated Google SERP proxy.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "apifyToken": {
            "title": "Apify token",
            "type": "string",
            "description": "Optional. Only needed when running this Actor outside the Apify platform. On the platform it is filled in automatically."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}