{
  "openapi": "3.0.1",
  "info": {
    "title": "IrishJobs.ie Scraper - Jobs, Salaries, Employers & Locations",
    "description": "Scrape job listings from IrishJobs.ie by keyword, location, job type, salary, recency, or search URL. Extract titles, employers, GPS locations, parsed EUR salary ranges, employment type, full descriptions, and posting dates.",
    "version": "1.0",
    "x-build-id": "LtZUhFhp8w64a3TcH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~irishjobs-ie/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-irishjobs-ie",
        "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/abotapi~irishjobs-ie/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-irishjobs-ie",
        "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/abotapi~irishjobs-ie/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-irishjobs-ie",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode builds SERP URLs from your keyword, location, and filter selections. URL mode paginates the exact SERP URLs you paste.",
            "default": "search"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Job title or keyword to search for (e.g. 'software engineer', 'nurse', 'chef'). Leave empty to browse all jobs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Town, city, or county to search in (e.g. 'Dublin', 'Cork', 'Galway'). One search URL per location. Leave empty to search all of Ireland.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "",
              "permanent",
              "contract",
              "temporary",
              "part-time",
              "graduate"
            ],
            "type": "string",
            "description": "Filter by employment type. All types are searched when empty.",
            "default": ""
          },
          "minSalary": {
            "title": "Minimum salary",
            "type": "integer",
            "description": "Minimum annual salary in EUR (e.g. 40000). Leave empty for no salary filter.",
            "default": 0
          },
          "salaryType": {
            "title": "Salary type",
            "enum": [
              "0",
              "1",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Salary period to filter by. Use with Minimum salary above.",
            "default": "0"
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "0",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Show jobs posted within this many days. Leave at 0 for any date.",
            "default": "0"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "Sort order for the search results.",
            "default": "1"
          },
          "urls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Paste IrishJobs.ie SERP URLs here (one per line). The actor paginates each URL until Max pages or Max jobs is reached. Example: 'https://www.irishjobs.ie/jobs/software-engineer/in-dublin'",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxPages": {
            "title": "Max pages",
            "type": "integer",
            "description": "Maximum number of SERP pages to walk per search URL. Each page returns up to 25 jobs. Leave empty or set to 0 for no page limit - the run stops at Max jobs instead."
          },
          "maxListings": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to return. 20 is a reasonable default for a quick sample. Set to 0 for unlimited (stops at Max pages if set, or walks the full catalogue).",
            "default": 20
          },
          "fetchDetails": {
            "title": "Fetch detail pages",
            "type": "boolean",
            "description": "Open each job's detail page for the full description, employer profile, benefits, GPS coordinates, and employment type. Adds a detail-enrichment surcharge per enriched job. Requires Residential proxy - free-tier users see listing fields only.",
            "default": false
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID (or dataset ID) to collect only jobs NOT already in that run. Use this to continue an interrupted crawl without re-collecting and re-charging the same jobs."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Enable recurring monitoring. On the first run the actor saves a snapshot of every job found. On each subsequent run with the same search, it returns only change rows: NEW jobs, UPDATED jobs (with the changed fields listed), REAPPEARED jobs, and (on a complete scan) EXPIRED jobs no longer found. UNCHANGED rows are suppressed by default. Use the emit toggles below to return them.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "A stable key that identifies this monitoring campaign's saved state. Defaults to a hash of your search (mode + keywords + location + filters), so the same search automatically picks up its own baseline. Set a custom key only when you need multiple campaigns on the same search."
          },
          "emitUnchanged": {
            "title": "Emit unchanged jobs",
            "type": "boolean",
            "description": "When ON, incremental mode also returns jobs that haven’t changed since the last run. Each UNCHANGED row bills a dataset-item event, same as a new result. Use only when your downstream pipeline needs the full corpus every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired jobs",
            "type": "boolean",
            "description": "When ON, incremental mode returns EXPIRED rows for jobs present in the saved baseline but no longer found on the site. Each EXPIRED row bills a dataset-item event. Requires a complete, uncapped scan of the full search - a run interrupted by Max jobs or Max pages will not detect expired jobs.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings for accessing IrishJobs.ie. Residential (Ireland) is required - other connection types are not served reliably.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "mcpConnectors": {
            "title": "MCP Connectors",
            "type": "array",
            "description": "List of MCP connector IDs to export scraped items to (e.g. Notion, Airtable, Linear). Items are pushed to the configured connectors as the actor runs. Leave empty to disable.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "When using a Notion connector, the parent page where the actor's database should live. Leave empty for the connector's default workspace root."
          },
          "maxNotifyListings": {
            "title": "Max notify listings",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of jobs to forward to MCP connectors. Acts as a safety cap to avoid overloading your Notion/Airtable base. Default 50.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}