{
  "openapi": "3.0.1",
  "info": {
    "title": "CutShort Jobs Scraper: India Tech Salaries",
    "description": "Collect public CutShort tech job listings with source salary ranges, skills, role and remote metadata, company details, provenance, deduplication, and recurring change detection.",
    "version": "1.4",
    "x-build-id": "ECVQeNc17d5M9q9v8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~cutshort-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-cutshort-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/getascraper~cutshort-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-cutshort-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/getascraper~cutshort-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-cutshort-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": {
          "skills": {
            "title": "Search skills or roles",
            "type": "array",
            "description": "Build CutShort public jobs URLs from these terms. Results from overlapping terms are combined and deduplicated.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Public CutShort job or jobs URLs",
            "type": "array",
            "description": "Public cutshort.io category/search pages and direct job URLs. URLs are combined with Skills.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Location filters",
            "type": "array",
            "description": "Optional case-insensitive location text filters. A job is kept when any requested value occurs in a source location.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "roleTypes": {
            "title": "Role type filters",
            "type": "array",
            "description": "Optional exact CutShort role type values, such as full_time or internship. A job is kept when any value matches.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote-only jobs",
            "type": "boolean",
            "description": "Keep only records whose source remoteType is exactly remote_only.",
            "default": false
          },
          "postedWithinHours": {
            "title": "Posted within (hours)",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "Keep only jobs the source dated within this many hours. CutShort only publishes a posting date on individual job pages, not on search/category listings, so this only has an effect when Public CutShort job or jobs URLs includes direct /job/... URLs. Jobs without a source date are kept, not dropped, since a missing date is not evidence of staleness. Leave empty for no filter."
          },
          "includeCompanyDetails": {
            "title": "Include public company details",
            "type": "boolean",
            "description": "Include source-provided company identity, profile, size, stage, funding code, follower count, links, and tech stack where present.",
            "default": false
          },
          "includeRecruiter": {
            "title": "Include public job-poster metadata",
            "type": "boolean",
            "description": "Opt in to source-provided public poster ID, name, and profile image. No private contact details are collected.",
            "default": false
          },
          "includeDescriptionHtml": {
            "title": "Include HTML description",
            "type": "boolean",
            "description": "Include the source-provided sanitized HTML description. Plain descriptionText is included in full output.",
            "default": false
          },
          "outputMode": {
            "title": "Output detail",
            "enum": [
              "full",
              "summary",
              "urls_only"
            ],
            "type": "string",
            "description": "full returns all fields, summary returns core job fields and provenance, and urls_only returns identity, URLs, provenance, and monitoring metadata.",
            "default": "full"
          },
          "maxItems": {
            "title": "Maximum job listings",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum unique records emitted after deduplication and filters.",
            "default": 25
          },
          "enrichEmails": {
            "title": "Discover employer contact email",
            "type": "boolean",
            "description": "Optional add-on. For each returned job, this searches for the hiring company's own website, checks that the site actually matches the company name, then looks for a contact email on it (mailto links, contact and about pages). CutShort itself never exposes a recruiter email, so any email found comes from the company's public website, not from CutShort. Turning this on also includes the company name in the output even when Include public company details is off, since the company name is needed to run the lookup. Works reliably for real, named employers; CutShort itself sometimes lists the employer only as a generic placeholder (for example an anonymized staffing-agency posting), and those cannot be looked up. Uses your Apify account's Google SERP proxy access for the search step; if your plan does not include that, this add-on is skipped for the run with a warning in the log rather than failing it. Increases run time.",
            "default": false
          },
          "monitoringMode": {
            "title": "Enable recurring change detection",
            "type": "boolean",
            "description": "Compare stable job content with the previous successful run for the same state name and source/filter scope.",
            "default": false
          },
          "includeUnchanged": {
            "title": "Include unchanged jobs",
            "type": "boolean",
            "description": "In monitoring mode, also emit records whose stable source content has not changed.",
            "default": false
          },
          "stateName": {
            "title": "Monitoring state name",
            "minLength": 1,
            "maxLength": 80,
            "type": "string",
            "description": "Stable namespace for a recurring monitor. Use a different value for each independent monitor.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional network proxy configuration.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}