{
  "openapi": "3.0.1",
  "info": {
    "title": "Business Search & AI Visibility Audit: NAP, Schema, AI Crawlers",
    "description": "Local SEO + AI search audit per business site: NAP and opening-hours consistency (site, schema, Google Business Profile, directories), schema vs visible prices, AI crawler access (GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot) and indexing. P0-P3 findings with fixes. $0.04/site.",
    "version": "0.1",
    "x-build-id": "NOI6Ad7Xdgn1dyot5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cygnix_labs~business-search-ai-visibility-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cygnix_labs-business-search-ai-visibility-audit",
        "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/cygnix_labs~business-search-ai-visibility-audit/runs": {
      "post": {
        "operationId": "runs-sync-cygnix_labs-business-search-ai-visibility-audit",
        "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/cygnix_labs~business-search-ai-visibility-audit/run-sync": {
      "post": {
        "operationId": "run-sync-cygnix_labs-business-search-ai-visibility-audit",
        "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",
        "properties": {
          "sites": {
            "title": "Business websites",
            "type": "array",
            "description": "One business per line: the website URL. Optionally add its Google Business Profile / Google Maps URL and directory listing URLs (Yelp, Fresha, Yell, Foursquare, Zomato, Talabat…) on the same line, separated by spaces, to compare name, phone, address and opening hours. Domains without https:// are fine.",
            "items": {
              "type": "string"
            }
          },
          "gbpUrl": {
            "title": "Google Business Profile / Maps URL (first site)",
            "type": "string",
            "description": "Optional. Applies to the first site above. Google Maps pages load details with JavaScript, so if they cannot be read the audit tells you and you can type the profile facts in the fields below."
          },
          "directoryUrls": {
            "title": "Directory / listing URLs (first site)",
            "type": "array",
            "description": "Optional. Listing pages for the first site (Yelp, Fresha, Treatwell, Yell, Foursquare, TripAdvisor, Zomato…). Name, phone, address and hours are read from their structured data or page text.",
            "items": {
              "type": "string"
            }
          },
          "knownName": {
            "title": "Confirmed business name",
            "type": "string",
            "description": "Optional. The name as it appears on Google Business Profile or as confirmed by the owner. Mismatches are flagged."
          },
          "knownPhone": {
            "title": "Confirmed phone",
            "type": "string",
            "description": "Optional, e.g. +965 2228 0611. If the website or its schema shows another number, that is flagged as P0."
          },
          "knownAddress": {
            "title": "Confirmed address",
            "type": "string",
            "description": "Optional. Street address as on Google Business Profile."
          },
          "knownHours": {
            "title": "Confirmed opening hours",
            "type": "string",
            "description": "Optional, plain English, e.g. \"Sun-Wed 9am-9pm, Thu 9am-3pm, Sat 11am-7pm, Fri closed\"."
          },
          "businesses": {
            "title": "Several businesses with profiles / confirmed facts (JSON)",
            "type": "array",
            "description": "Advanced: a list of objects for bulk audits, e.g. [{\"url\": \"https://clinic.com\", \"gbpUrl\": \"https://maps.google.com/?cid=…\", \"directoryUrls\": [\"https://www.yelp.com/biz/…\"], \"name\": \"…\", \"phone\": \"…\", \"address\": \"…\", \"hours\": \"Mon-Fri 9am-5pm\"}]. Every field except url is optional."
          },
          "maxPagesPerSite": {
            "title": "Pages read per site",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Homepage plus the most important linked pages (contact, about, locations, prices, services, products). Same price whatever you choose.",
            "default": 8
          },
          "sitemapSampleSize": {
            "title": "Sitemap URLs to test per site",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "URLs sampled evenly from the XML sitemap and checked for errors, redirects and noindex.",
            "default": 15
          },
          "testBotUserAgents": {
            "title": "Test firewall with AI bot user agents",
            "type": "boolean",
            "description": "Requests the homepage once each as OAI-SearchBot, PerplexityBot, GPTBot and ClaudeBot to spot CDN/WAF rules that block them. Requests come from Apify IPs, not the bots' official IPs, so results are flagged as observations to confirm in your logs.",
            "default": true
          },
          "maxSites": {
            "title": "Max sites per run",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Safety cap on billed sites per run.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Sites in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many sites are audited at the same time (each site is read politely, 3 requests at a time).",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Per request.",
            "default": 20
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}