{
  "openapi": "3.0.1",
  "info": {
    "title": "Shine Jobs Scraper & API: Real or Fake Check, Salary",
    "description": "Scrape Shine.com India jobs with a real-or-fake check on every job: imported feed jobs that hide the employer, US jobs listed as \"All India\", fee and easy-money offers. Company or agency, salary in lakhs, applicants, recruiter contact, all results, job alerts.",
    "version": "0.1",
    "x-build-id": "gmbjccD2QbqhwBrnJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s_actors~shine-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s_actors-shine-jobs-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/s_actors~shine-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-s_actors-shine-jobs-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/s_actors~shine-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-s_actors-shine-jobs-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": {
          "keywords": {
            "title": "🔎 Keywords",
            "type": "array",
            "description": "Job title, skill or role, one per line: \"accountant\", \"python developer\", \"telecaller\", \"data entry\", \"sales manager\", \"staff nurse\". Each is its own Shine search (Shine's own search, all its results: no 1,000 cap). Empty = every job on Shine (about 238,000) in the locations below.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "City, one per line: Bangalore, Mumbai, Delhi, Gurgaon, Noida, Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, Jaipur, Kochi, Lucknow, Indore… or \"Remote\" (jobs whose title or text says remote / work from home). Each location is its own search. Empty = all of India.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerSearch": {
            "title": "💯 Max jobs per search",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap for each keyword × location and each link. Shine has no cap of its own: \"sales manager\" alone has 62,000 jobs.",
            "default": 100
          },
          "fakeJobCheck": {
            "title": "🛡️ Real or fake check",
            "enum": [
              "hideLikelyFake",
              "onlyGenuine",
              "showAll"
            ],
            "type": "string",
            "description": "verdict = \"likely fake\" (a fee or deposit, easy money for data entry or typing, a pay-to-start business, a job abroad listed in India, a remote \"no experience\" feed job with no employer), \"check first\" (imported, employer not named, WhatsApp or Gmail contact, another city in the text, 4x salary range…) or \"looks genuine\". Hidden jobs are free.",
            "default": "hideLikelyFake"
          },
          "skipImportedJobs": {
            "title": "Only jobs posted on Shine by a recruiter",
            "type": "boolean",
            "description": "Skip jobs Shine imported from other sites (imported = true): they have no recruiter and no contact on Shine. Skipped jobs are free.",
            "default": false
          },
          "postedBy": {
            "title": "🏢 Posted by",
            "enum": [
              "any",
              "company",
              "agency"
            ],
            "type": "string",
            "description": "Most Shine jobs come from consultancies (\"X Hiring For Y\", placement and staffing firms). Every row says postedByType (company, agency or imported) and hiringFor.",
            "default": "any"
          },
          "onlyWithRecruiterContact": {
            "title": "📇 Only jobs with a recruiter contact",
            "type": "boolean",
            "description": "Keep only jobs whose recruiter published an email or phone on Shine. Contacts a recruiter chose to hide are never returned, and Shine's placeholder pair (shinetest12345@gmail.com) is removed.",
            "default": false
          },
          "oneRowPerRecruiter": {
            "title": "👥 One row per recruiter (lead list)",
            "type": "boolean",
            "description": "Instead of one row per job: one row per recruiter or consultancy with a published contact, with all its jobs in the search (count, titles, cities, industries, clients, salary range, applicants, last posted) and the company website from a business email. Consultancies post many jobs under one contact, so you pay once per recruiter. Max jobs per search then counts jobs with a contact.",
            "default": false
          },
          "postedWithin": {
            "title": "📅 Posted within",
            "enum": [
              "anyTime",
              "past24Hours",
              "past3Days",
              "pastWeek",
              "past2Weeks",
              "pastMonth",
              "past3Months"
            ],
            "type": "string",
            "description": "By the posting date. Shine has no date filter: the Actor reads newest first and stops past the window, so a short window is fast and cheap.",
            "default": "anyTime"
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "newest",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first is best for job alerts and date windows.",
            "default": "newest"
          },
          "experienceBands": {
            "title": "Experience (Shine's bands)",
            "type": "array",
            "description": "Shine's own experience filter (server side). Several = any of them.",
            "items": {
              "type": "string",
              "enum": [
                "lt1",
                "1to2",
                "3to5",
                "6to8",
                "9to10",
                "11to15",
                "gt15"
              ],
              "enumTitles": [
                "Less than 1 year",
                "1 to 2 years",
                "3 to 5 years",
                "6 to 8 years",
                "9 to 10 years",
                "11 to 15 years",
                "More than 15 years"
              ]
            }
          },
          "experienceMinYears": {
            "title": "Experience from (years)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Keeps jobs whose experience range reaches this many years (exact, by each job's range)."
          },
          "experienceMaxYears": {
            "title": "Experience up to (years)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Keeps jobs open to candidates with at most this many years. 0 = jobs for freshers."
          },
          "minSalaryLakhs": {
            "title": "💰 Minimum salary (lakh a year, shown salary only)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Keeps jobs that show a salary reaching this many lakh a year, e.g. 6 = ₹6 L. About 3 in 4 Shine jobs hide the salary; they are dropped by this filter (free)."
          },
          "salaryBands": {
            "title": "Salary (Shine's bands)",
            "type": "array",
            "description": "Shine's own salary filter (server side). It also matches jobs that hide the salary; for shown salaries only use the minimum above.",
            "items": {
              "type": "string",
              "enum": [
                "0to2",
                "3to5",
                "6to8",
                "9to12",
                "13to16",
                "17to25",
                "gt25"
              ],
              "enumTitles": [
                "Up to 2 lakh",
                "3 to 5 lakh",
                "6 to 8 lakh",
                "9 to 12 lakh",
                "13 to 16 lakh",
                "17 to 25 lakh",
                "More than 25 lakh"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Shine's own type. Few jobs carry Shine's work-from-home tag (152 of 238,000); for remote jobs use Location \"Remote\" or the switch below.",
            "items": {
              "type": "string",
              "enum": [
                "regular",
                "contractual",
                "internship",
                "workFromHome"
              ],
              "enumTitles": [
                "Regular",
                "Contractual",
                "Internship",
                "Work from home (Shine's own tag, rare)"
              ]
            }
          },
          "remoteOnly": {
            "title": "🏠 Remote / work from home only",
            "type": "boolean",
            "description": "Keep jobs whose title, location or text says remote or work from home (workplaceType = remote, with the evidence).",
            "default": false
          },
          "walkInOnly": {
            "title": "Walk-in interviews only",
            "type": "boolean",
            "description": "Shine's walk-in jobs.",
            "default": false
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Shine industry names, one per line: \"IT Services & Consulting\", \"BFSI\", \"Medical / Healthcare\", \"BPO / Call Center\", \"Manufacturing\", \"Education / Training\". A part of the name works; the run logs what matched.",
            "items": {
              "type": "string"
            }
          },
          "functionalAreas": {
            "title": "Functional areas",
            "type": "array",
            "description": "Shine job functions, one per line: \"Sales / BD\", \"Finance / Accounts / Tax\", \"Recruitment\", \"Customer Service (Domestic)\", \"Testing\", \"Teacher / Tutor\".",
            "items": {
              "type": "string"
            }
          },
          "titleMustMatchKeyword": {
            "title": "Title must contain the keyword",
            "type": "boolean",
            "description": "Shine's search also returns jobs that only mention the keyword. On = only titles with every word of the keyword.",
            "default": false
          },
          "titleInclude": {
            "title": "Title must contain one of",
            "type": "array",
            "description": "e.g. senior, executive, intern.",
            "items": {
              "type": "string"
            }
          },
          "titleExclude": {
            "title": "Title must not contain",
            "type": "array",
            "description": "e.g. sales, telecaller.",
            "items": {
              "type": "string"
            }
          },
          "companyExclude": {
            "title": "Skip companies",
            "type": "array",
            "description": "Company or consultancy names (or parts) to skip.",
            "items": {
              "type": "string"
            }
          },
          "skipDuplicates": {
            "title": "Skip copies of the same job",
            "type": "boolean",
            "description": "Same title, company and cities = one job (consultancies post one job many times). Copies are free.",
            "default": true
          },
          "includeApplicants": {
            "title": "Applicants from the job page",
            "type": "boolean",
            "description": "Open each job's page for the number of applicants, the states of its cities and the salary as Shine stores it. Off = faster (one request per 50 jobs), applicants = null.",
            "default": true
          },
          "searchUrls": {
            "title": "🔗 Shine search links",
            "type": "array",
            "description": "One per line: https://www.shine.com/job-search/python-jobs-in-bangalore, https://www.shine.com/job-search/accountant-jobs, https://www.shine.com/job-search/jobs-in-pune.",
            "items": {
              "type": "string"
            }
          },
          "jobUrls": {
            "title": "Job links",
            "type": "array",
            "description": "Single jobs to check: https://www.shine.com/jobs/<title>/<company>/<id>. Each comes back with its verdict and reasons, whatever the setting above.",
            "items": {
              "type": "string"
            }
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "none"
            ],
            "type": "string",
            "description": "The full description (Shine stores it as plain text).",
            "default": "text"
          },
          "onlyNewJobs": {
            "title": "🔔 Only new jobs (job alert)",
            "type": "boolean",
            "description": "Remembers the jobs of earlier runs with the same alert name and returns only new ones, newest first. Schedule the Actor hourly or daily for a Shine job alert to Slack, email or a sheet. Jobs already seen are free.",
            "default": false
          },
          "monitorName": {
            "title": "Alert name",
            "type": "string",
            "description": "Separate memory per alert, e.g. \"accountant-pune\". Empty = \"default\"."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many Shine requests run at once.",
            "default": 10
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Log every retry.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}