{
  "openapi": "3.0.1",
  "info": {
    "title": "Shine Scraper & New-Job Monitor - India Jobs, Salary & Skills",
    "description": "For India recruitment, salary benchmarking and job boards: Shine.com listings as clean JSON with the salary as two numbers in INR per year, on 66 of 80 listings measured on 2026-09-04. Developer showed 38,305 jobs nationwide, 4,923 in Bangalore. Monitoring returns only new jobs.",
    "version": "0.1",
    "x-build-id": "y3XaCBax5ihsAkiOU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~shine-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-shine-jobs",
        "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/neverempty~shine-jobs/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-shine-jobs",
        "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/neverempty~shine-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-shine-jobs",
        "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": {
          "keyword": {
            "title": "Job title or skill",
            "type": "string",
            "description": "What to search for: `developer`, `accountant`, `nurse`, `data analyst`. Spaces are turned into hyphens for you. Measured on 2026-09-04: developer 38,305 jobs, accountant 12,768, nurse 1,110. A word Shine does not have returns zero results with a total count of zero, so you get one unpaid row saying so instead of a silently unfiltered list. Optional: leave it empty to search every job in the city you set (for example /job-search/jobs-in-bangalore) or in all of India. Only when keyword, city, keywords and companyNames are all empty is the example keyword `developer` used, and every row then says so in `note`. Each row carries `searchUrl`, the Shine listing it was read from."
          },
          "city": {
            "title": "City (optional)",
            "type": "string",
            "description": "Narrow to one city, for example `bangalore`, `mumbai`, `delhi`, `hyderabad`, `pune`. Measured: `developer` in Bangalore is 4,923 of the 38,305 nationwide. Leave empty for all of India. Shine silently ignores spellings it does not know (measured on 2026-09-11: `delhi-ncr`, `greater-noida`, `trivandrum`, `vizag`, `remote`) and returns the whole of India; this Actor reads the location Shine reports on its own page and returns one unpaid `city-not-recognised` row instead. `delhi`, `noida` and `gurgaon` each return the whole Delhi capital region (34,334 jobs). When a known city has no jobs for your keyword you get one unpaid `no-jobs-in-city` row, and when it has only a few, only those are returned - the jobs Shine adds from other cities are left out and not charged.",
            "default": ""
          },
          "maxJobs": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many jobs to return at most. One job = one row = one charged event. Shine lists 20 jobs per page and this Actor reads all 20 from a single request, so 200 jobs costs 10 requests. A job that appears again is dropped, so it is never charged twice.",
            "default": 20
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Default: true. The full advert text with HTML stripped and HTML entities decoded. Turn it off for a much smaller dataset - the price is the same either way.",
            "default": true
          },
          "keywords": {
            "title": "Keyword filter",
            "type": "array",
            "description": "Keep only jobs whose title, description, company, industry, skills or location contains one of these words. Case is ignored. Leave empty to keep everything. Nothing extra is fetched from Shine - this narrows the jobs already read, and jobs that do not match are never charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword matching",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "`any` keeps a job that contains at least one keyword. `all` keeps only jobs that contain every keyword.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop any job containing one of these words - for example `intern`, `commission only`, a staffing agency you do not want. Applied after the keyword filter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Companies to include",
            "type": "array",
            "description": "Keep only jobs from employers whose name contains one of these (partial match, case ignored). Leave empty for all employers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Minimum salary (INR per year)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs paying at least this much. Shine publishes a salary on about 82% of listings. A job with no published salary is **kept**, not dropped - an unknown salary is not a low one. Turn on `requireSalary` if you want those dropped too.",
            "default": 0
          },
          "requireSalary": {
            "title": "Only jobs that publish a salary",
            "type": "boolean",
            "description": "Default: false. Turn it on to drop the roughly 18% of jobs that hide the salary.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. 0 means no limit. A job whose posted date cannot be read is **kept**, not dropped.",
            "default": 0
          },
          "monitoringMode": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Default: false. Turn it on and schedule this Actor daily: each run returns only the jobs it has not returned before, so you pay for new postings instead of the same list again. The first run returns everything and remembers it. Jobs read but filtered out are remembered too, so they never come back as false 'new' ones.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Reset the monitoring memory (one-shot)",
            "type": "boolean",
            "description": "Default: false. Turn it on for a single run to forget which jobs were already returned and start monitoring again from scratch.",
            "default": false
          },
          "useProxy": {
            "title": "Use an Apify proxy",
            "type": "boolean",
            "description": "Default: true. Runs go out through an Apify proxy so a shared datacenter address does not get in the way. Turn it off if you are running from a network Shine already accepts.",
            "default": true
          },
          "maxPages": {
            "title": "Maximum listing pages",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Safety cap on how many listing pages to walk. 0 lets the Actor decide from Maximum jobs (20 per page). The run stops early on its own when a page brings no new jobs.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}