{
  "openapi": "3.0.1",
  "info": {
    "title": "Disqus Comments Scraper - Comments, Replies & Threads",
    "description": "Scrape Disqus comments from any article URL, forum shortname or thread id: text, HTML, replies (parent), date, likes, edited and deleted flags, author display name. List a whole forum's discussions. Schedule it: only new comments. No login. Error rows are free.",
    "version": "0.1",
    "x-build-id": "fKiuAXO1JJVlpahvC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~disqus-comments-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-disqus-comments-scraper",
        "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/scrapewise~disqus-comments-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-disqus-comments-scraper",
        "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/scrapewise~disqus-comments-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-disqus-comments-scraper",
        "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": {
          "startUrls": {
            "title": "Page URLs",
            "type": "array",
            "description": "Article or page URLs that show Disqus comments, one per line, for example https://wccftech.com/pny-denies-rtx-5090-warranty-non-approved-12vhpwr-cable/. With or without https://. The Actor finds the page's Disqus discussion by itself and returns its comments, each charged as 'Comment delivered'. A forum shortname or a numeric thread id pasted here also works.",
            "items": {
              "type": "string"
            }
          },
          "forums": {
            "title": "Forum shortnames (whole site)",
            "type": "array",
            "description": "Disqus forum shortnames to read a whole site, one per line: the part before .disqus.com in the site's embed.js, for example wccftech. Upper case, spaces and full links like https://wccftech.disqus.com are fine; a website address works too when its pages load Disqus. What comes back depends on 'Forum mode' below.",
            "items": {
              "type": "string"
            }
          },
          "threadIds": {
            "title": "Disqus thread ids",
            "type": "array",
            "description": "Numeric Disqus thread ids, one per line, for example 11489208382 (the threadId column of an earlier run). Faster than a page URL because the discussion does not need to be looked up.",
            "items": {
              "type": "string"
            }
          },
          "forumMode": {
            "title": "Forum mode",
            "enum": [
              "latestComments",
              "threads",
              "threadsWithComments"
            ],
            "type": "string",
            "description": "Only for forum shortnames. Latest comments (default) = the newest comments across the whole site, each with its discussion title and link; one request per 100 comments and the best choice for daily monitoring. Discussions only = one row per discussion with title, link, comment count, date and likes, charged as 'Discussion delivered'. Discussions with comments = each discussion row followed by its comments (up to 'Max comments' per discussion).",
            "default": "latestComments"
          },
          "threadSort": {
            "title": "Which discussions",
            "enum": [
              "newest",
              "popular1d",
              "popular7d",
              "popular30d",
              "popular90d"
            ],
            "type": "string",
            "description": "Which discussions the two discussion modes read: Newest (default, the most recently created), or Most commented in the last 24 hours, 7, 30 or 90 days (Disqus' own popular list, up to 100 discussions).",
            "default": "newest"
          },
          "maxThreads": {
            "title": "Max discussions per forum",
            "minimum": 0,
            "type": "integer",
            "description": "How many discussions to read per forum in the two discussion modes, for example 10 (default). 0 = up to 10,000. Each discussion row is charged, and in 'Discussions with comments' its comments are charged too, so this drives most of the cost.",
            "default": 10
          },
          "maxComments": {
            "title": "Max comments",
            "minimum": 0,
            "type": "integer",
            "description": "Comments per page URL or thread id, per discussion in 'Discussions with comments', and per forum in 'Latest comments', for example 100 (default). Disqus returns 100 per request. 0 = all (up to 50,000). You pay per comment delivered.",
            "default": 100
          },
          "commentOrder": {
            "title": "Comment order",
            "enum": [
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "Newest first (default), or Oldest first (the order of the conversation, good for full exports). With a limit it also decides which comments you get. 'Only new comments' and 'Comments since' always read newest first.",
            "default": "newest"
          },
          "commentsSince": {
            "title": "Comments since",
            "type": "string",
            "description": "Only comments posted on or after this moment (UTC): a date such as 2026-10-01, or a period such as 7 days or 24 hours. Reading stops as soon as older comments are reached, so it also saves time. Empty = all dates."
          },
          "onlyNew": {
            "title": "Only new comments since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Remembers the newest comment delivered for each page, thread and forum in a named key-value store in your account ('disqus-comments-scraper-state') and delivers only comments posted after it. The first run delivers up to the limit. Discussion rows come back only when the discussion is new or has new comments. Nothing new = nothing charged. Delete the store to start over.",
            "default": false
          },
          "requestDelaySecs": {
            "title": "Pause between requests (seconds)",
            "minimum": 0,
            "maximum": 60,
            "type": "number",
            "description": "Pause in seconds between Disqus API requests, from 0 to 60 (default 1). The default stays well inside the public limit; if Disqus answers with a rate limit, the Actor waits, doubles the pause and, when it can, switches IP. Raise it for very large exports.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Off by default and usually not needed: the Disqus API answers datacenter IPs. Turn on Apify Proxy (datacenter) to spread very large exports over several IPs. Without it, the Actor switches to the datacenter proxy on its own if Disqus rate-limits the run's IP and your account has it.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}