{
  "service": "scrapingant",
  "displayName": "ScrapingAnt",
  "categories": [
    "AI",
    "Data",
    "Developer Tools"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "SCRAPINGANT_API_KEY",
      "description": "ScrapingAnt API key sent as the x-api-key query parameter.",
      "extraFields": []
    }
  ],
  "homepageUrl": "https://scrapingant.com",
  "actions": [
    {
      "id": "scrapingant.extract_content_as_markdown",
      "service": "scrapingant",
      "name": "extract_content_as_markdown",
      "description": "Convert a page into Markdown through ScrapingAnt's Markdown transformation endpoint.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The absolute URL to scrape.",
            "format": "uri"
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "DELETE"
            ],
            "description": "The HTTP method sent to the target site through ScrapingAnt."
          },
          "browser": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should render the page in a headless browser."
          },
          "timeout": {
            "type": "integer",
            "minimum": 5,
            "maximum": 60,
            "description": "The maximum upstream request time in seconds."
          },
          "returnPageSource": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should return the raw server page source without JavaScript rendering."
          },
          "cookies": {
            "type": "string",
            "minLength": 1,
            "description": "The cookie string sent to the target site, for example name=value; second=value."
          },
          "jsSnippet": {
            "type": "string",
            "minLength": 1,
            "description": "A plain JavaScript snippet that the connector will Base64-encode for ScrapingAnt."
          },
          "proxyType": {
            "type": "string",
            "enum": [
              "datacenter",
              "residential"
            ],
            "description": "The proxy network to use for the request."
          },
          "proxyCountry": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "The two-letter proxy country code.",
            "pattern": "^[A-Za-z]{2}$"
          },
          "waitForSelector": {
            "type": "string",
            "minLength": 1,
            "description": "The CSS selector ScrapingAnt should wait for before returning the result."
          },
          "blockResource": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "document",
                "stylesheet",
                "image",
                "media",
                "font",
                "script",
                "texttrack",
                "xhr",
                "fetch",
                "eventsource",
                "websocket",
                "manifest",
                "other"
              ],
              "description": "One blocked resource type."
            },
            "description": "The resource types ScrapingAnt should block while rendering.",
            "minItems": 1
          },
          "customHeaders": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "minLength": 1,
              "description": "One custom header value."
            },
            "description": "Custom request headers forwarded to the target page through Ant-* headers."
          },
          "bodyText": {
            "type": "string",
            "minLength": 1,
            "description": "A raw text request body forwarded to the target page for POST, PUT, or DELETE requests."
          },
          "bodyJson": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "A JSON object request body forwarded to the target page for POST, PUT, or DELETE requests."
          }
        },
        "additionalProperties": false,
        "required": [
          "url"
        ],
        "description": "The common ScrapingAnt request parameters supported by the v2 scraping endpoints."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The original requested URL.",
            "format": "uri"
          },
          "markdown": {
            "type": "string",
            "minLength": 1,
            "description": "The Markdown content extracted from the target page."
          }
        },
        "additionalProperties": false,
        "description": "The Markdown extraction response returned by ScrapingAnt."
      }
    },
    {
      "id": "scrapingant.extract_data_with_ai",
      "service": "scrapingant",
      "name": "extract_data_with_ai",
      "description": "Extract structured top-level JSON fields from a page through ScrapingAnt's AI extraction endpoint.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The absolute URL to scrape.",
            "format": "uri"
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "DELETE"
            ],
            "description": "The HTTP method sent to the target site through ScrapingAnt."
          },
          "browser": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should render the page in a headless browser."
          },
          "timeout": {
            "type": "integer",
            "minimum": 5,
            "maximum": 60,
            "description": "The maximum upstream request time in seconds."
          },
          "returnPageSource": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should return the raw server page source without JavaScript rendering."
          },
          "cookies": {
            "type": "string",
            "minLength": 1,
            "description": "The cookie string sent to the target site, for example name=value; second=value."
          },
          "jsSnippet": {
            "type": "string",
            "minLength": 1,
            "description": "A plain JavaScript snippet that the connector will Base64-encode for ScrapingAnt."
          },
          "proxyType": {
            "type": "string",
            "enum": [
              "datacenter",
              "residential"
            ],
            "description": "The proxy network to use for the request."
          },
          "proxyCountry": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "The two-letter proxy country code.",
            "pattern": "^[A-Za-z]{2}$"
          },
          "waitForSelector": {
            "type": "string",
            "minLength": 1,
            "description": "The CSS selector ScrapingAnt should wait for before returning the result."
          },
          "blockResource": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "document",
                "stylesheet",
                "image",
                "media",
                "font",
                "script",
                "texttrack",
                "xhr",
                "fetch",
                "eventsource",
                "websocket",
                "manifest",
                "other"
              ],
              "description": "One blocked resource type."
            },
            "description": "The resource types ScrapingAnt should block while rendering.",
            "minItems": 1
          },
          "customHeaders": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "minLength": 1,
              "description": "One custom header value."
            },
            "description": "Custom request headers forwarded to the target page through Ant-* headers."
          },
          "bodyText": {
            "type": "string",
            "minLength": 1,
            "description": "A raw text request body forwarded to the target page for POST, PUT, or DELETE requests."
          },
          "bodyJson": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "A JSON object request body forwarded to the target page for POST, PUT, or DELETE requests."
          },
          "extractProperties": {
            "type": "string",
            "minLength": 1,
            "description": "The free-form extraction description that ScrapingAnt will map into top-level JSON fields."
          }
        },
        "additionalProperties": false,
        "required": [
          "url",
          "extractProperties"
        ],
        "description": "The input payload for ScrapingAnt AI extraction."
      },
      "outputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "description": "The top-level JSON object returned by ScrapingAnt AI extraction."
      }
    },
    {
      "id": "scrapingant.get_api_credits_usage",
      "service": "scrapingant",
      "name": "get_api_credits_usage",
      "description": "Read the current ScrapingAnt subscription status and remaining API credits.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "The input payload for retrieving ScrapingAnt API credits usage."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "plan_name": {
            "type": "string",
            "minLength": 1,
            "description": "The active subscription plan name."
          },
          "start_date": {
            "type": "string",
            "minLength": 1,
            "description": "The active subscription start date."
          },
          "end_date": {
            "type": "string",
            "minLength": 1,
            "description": "The active subscription end date."
          },
          "plan_total_credits": {
            "type": "integer",
            "description": "The total credits available for the active plan."
          },
          "remained_credits": {
            "type": "integer",
            "description": "The remaining credits available for the active plan."
          }
        },
        "additionalProperties": false,
        "description": "The credits usage payload returned by ScrapingAnt."
      }
    },
    {
      "id": "scrapingant.scrape_with_extended_json_output",
      "service": "scrapingant",
      "name": "scrape_with_extended_json_output",
      "description": "Scrape a page through ScrapingAnt's v2 extended endpoint and return HTML, text, cookies, headers, XHRs, and iframes.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The absolute URL to scrape.",
            "format": "uri"
          },
          "method": {
            "type": "string",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "DELETE"
            ],
            "description": "The HTTP method sent to the target site through ScrapingAnt."
          },
          "browser": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should render the page in a headless browser."
          },
          "timeout": {
            "type": "integer",
            "minimum": 5,
            "maximum": 60,
            "description": "The maximum upstream request time in seconds."
          },
          "returnPageSource": {
            "type": "boolean",
            "description": "Whether ScrapingAnt should return the raw server page source without JavaScript rendering."
          },
          "cookies": {
            "type": "string",
            "minLength": 1,
            "description": "The cookie string sent to the target site, for example name=value; second=value."
          },
          "jsSnippet": {
            "type": "string",
            "minLength": 1,
            "description": "A plain JavaScript snippet that the connector will Base64-encode for ScrapingAnt."
          },
          "proxyType": {
            "type": "string",
            "enum": [
              "datacenter",
              "residential"
            ],
            "description": "The proxy network to use for the request."
          },
          "proxyCountry": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "The two-letter proxy country code.",
            "pattern": "^[A-Za-z]{2}$"
          },
          "waitForSelector": {
            "type": "string",
            "minLength": 1,
            "description": "The CSS selector ScrapingAnt should wait for before returning the result."
          },
          "blockResource": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "document",
                "stylesheet",
                "image",
                "media",
                "font",
                "script",
                "texttrack",
                "xhr",
                "fetch",
                "eventsource",
                "websocket",
                "manifest",
                "other"
              ],
              "description": "One blocked resource type."
            },
            "description": "The resource types ScrapingAnt should block while rendering.",
            "minItems": 1
          },
          "customHeaders": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "minLength": 1,
              "description": "One custom header value."
            },
            "description": "Custom request headers forwarded to the target page through Ant-* headers."
          },
          "bodyText": {
            "type": "string",
            "minLength": 1,
            "description": "A raw text request body forwarded to the target page for POST, PUT, or DELETE requests."
          },
          "bodyJson": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "A JSON object request body forwarded to the target page for POST, PUT, or DELETE requests."
          }
        },
        "additionalProperties": false,
        "required": [
          "url"
        ],
        "description": "The common ScrapingAnt request parameters supported by the v2 scraping endpoints."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "html": {
            "type": "string",
            "minLength": 1,
            "description": "The rendered page HTML."
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "description": "The extracted plain text content."
          },
          "cookies": {
            "type": "string",
            "description": "The response cookies returned by the target page."
          },
          "status_code": {
            "type": "integer",
            "description": "The HTTP status code returned by the target page."
          },
          "headers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The header name."
                },
                "value": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The header value."
                }
              },
              "additionalProperties": false,
              "description": "One HTTP header item returned by ScrapingAnt."
            },
            "description": "The HTTP response headers returned by the target page."
          },
          "xhrs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "description": "The captured request URL.",
                  "format": "uri"
                },
                "status": {
                  "type": "integer",
                  "description": "The captured response status code."
                },
                "method": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The captured HTTP method."
                },
                "headers": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "description": "The header name."
                      },
                      "value": {
                        "type": "string",
                        "minLength": 1,
                        "description": "The header value."
                      }
                    },
                    "additionalProperties": false,
                    "description": "One HTTP header item returned by ScrapingAnt."
                  },
                  "description": "The headers captured for the XHR request."
                },
                "body": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The response body captured for the XHR request."
                },
                "request_body": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The request body captured for the XHR request."
                }
              },
              "additionalProperties": true,
              "required": [
                "url",
                "status",
                "method",
                "headers"
              ],
              "description": "One XHR or fetch request captured by ScrapingAnt."
            },
            "description": "The XHR and fetch requests captured during page rendering."
          },
          "iframes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "src": {
                  "type": "string",
                  "description": "The iframe source URL.",
                  "format": "uri"
                },
                "html": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The rendered iframe HTML."
                }
              },
              "additionalProperties": false,
              "description": "One iframe captured by ScrapingAnt."
            },
            "description": "The iframe payloads captured during page rendering."
          }
        },
        "additionalProperties": false,
        "description": "The extended JSON response returned by ScrapingAnt."
      }
    }
  ]
}
