# Wisconsin State Government Jobs Scraper (`founder-experiment/wisconsin-state-government-jobs`) Actor

Wisconsin state government jobs from the public wisc.jobs list: title, agency, job class, category, location, posted/deadline date, link. JSON, CSV, API. onlyNew. No contacts. $0.50/1k. AI-operated.

- **URL**: https://apify.com/founder-experiment/wisconsin-state-government-jobs.md
- **Developed by:** [Rowfield Data](https://apify.com/founder-experiment) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Wisconsin State Government Jobs Scraper

Pay-per-result actor ($0.50 per 1,000 jobs) that exports public **Wisconsin state government job listings** (the public job list on wisc.jobs) as clean rows: JSON, CSV, Excel or through the API, with a link to each posting. It returns posting facts only: no description text, no contact names, e-mail addresses or phone numbers.

Also searched as: Wisconsin state jobs, wisc.jobs, State of Wisconsin careers, Madison government jobs, Wisconsin public sector jobs, US state government jobs feed.

**Coverage (2026-10-29 test run of this actor):** the public list held 305 postings. Some list a deadline; others are open until filled (`closingDate` is `null`).

### What it does

- Reads the public job list on wisc.jobs (one request per run, no paging; the page itself carries the whole list).
- Returns one row per posting: title, agency, agency code, job classification code and title, job category, location, posting date, deadline date, link, attribution.
- Filters by title words, excluded words, agency, location, job category, days to deadline and days since posting.
- `onlyNew` returns only postings you have not seen before. Good for a daily schedule.

### What it does not do

- It does not open individual posting pages: no description, duties, salary or how-to-apply text.
- It returns no contact names, e-mails or phone numbers. A guard fails the run, with no rows pushed, if an e-mail or phone pattern shows up in the output.
- It does not log in, create accounts or apply for jobs. Internal-only postings are not on the public list.

### What does it cost?

Pay per result: $0.0005 per job returned ($0.50 per 1,000) and $0.00005 per run start; platform usage is included, so there is no separate compute fee. Jobs removed by your filters, cut by `maxItems` or skipped by `onlyNew` are not charged.

- Full list (305 postings on 2026-10-29): about $0.15 per run.
- Daily `onlyNew` run: you pay only for new postings; 30 new ones cost $0.015.

### Input

- `titleKeywords`: keep jobs whose title or classification has a word starting with a keyword (`engineer`, `nurse`).
- `excludeKeywords`: drop jobs whose title has a word starting with one of these.
- `agencies`: part of the agency name (`Corrections`, `Transportation`, `Natural Resources`).
- `locations`: part of a location (`Madison`, `Milwaukee`, `Statewide`).
- `jobCategories`: part of a job category (`Healthcare`, `Legal`, `Architecture & Engineering`).
- `closingWithinDays`, `includeNoClosingDate`, `postedWithinDays`: date windows from today.
- `onlyNew`: return only jobs not returned by an earlier run (memory in your key-value store `wi-state-jobs-memory`).
- `maxItems`: return at most this many jobs.

### Input examples

Jobs in Madison:

```json
{"locations": ["Madison"]}
```

Engineering roles posted this week:

```json
{"titleKeywords": ["engineer"], "postedWithinDays": 7}
```

Daily feed of new postings (schedule it daily):

```json
{"onlyNew": true}
```

### Output example

One row from the 2026-10-29 test run:

```json
{
  "title": "Facilities Repair Worker – Advanced",
  "agency": "Administration",
  "agencyCode": "50500",
  "jobCode": "76126",
  "jobCodeTitle": "FACILITIES REPAIR WORKER-ADV",
  "jobCategory": "Facility/Construct/Maintenance",
  "location": "Madison",
  "postedDate": "2026-10-29",
  "closingDate": "2026-11-11",
  "jobId": "22495",
  "url": "https://wj.wi.gov/psc/wisjobs/CAREERS/HRMS/c/HRS_HRAM_FL.HRS_CG_SEARCH_FL.GBL?Page=HRS_APP_JBPST_FL&Action=U&FOCUS=Applicant&SiteId=1&PostingSeq=1&JobOpeningId=22495",
  "source": "Contains information from the public Wisc.Jobs job list (State of Wisconsin). Not made by, affiliated with or endorsed by the State of Wisconsin.",
  "scrapedAt": "2026-10-29T14:21:03+00:00"
}
```

`closingDate` is `null` when the posting is open until filled.

### Use it from an AI agent (MCP)

Add this actor as a tool through the Apify hosted MCP server:

```
https://mcp.apify.com?tools=founder-experiment/wisconsin-state-government-jobs
```

Runs use your own Apify platform usage.

### Polite access

- robots.txt is read first; the run stops if it disallows the list or returns an error. No robots.txt (404) means no rules.
- Two requests per run (robots.txt, then the list), at least 2.5 seconds apart, no cookies sent back, no form posts, no proxy, redirects not followed, no retries.
- The run stops, with no job rows charged (only the run-start fee), if the list returns an error or the job data is missing.
- Please run it at most once a day.
- If the State of Wisconsin asks us to stop, we will unpublish this actor.

### FAQ

**What does it cost?** $0.50 per 1,000 jobs returned ($0.0005 per job) plus $0.00005 per run start. Platform usage is included. Jobs removed by your filters, cut by `maxItems` or skipped by `onlyNew` are not charged.

**How does `onlyNew` work?** The actor remembers the IDs of the postings it reads (up to 20,000) in a key-value store named `wi-state-jobs-memory` in your own Apify account. With `onlyNew` on, postings already in that memory are skipped. Delete that store to start fresh.

**Why no salary or description?** The public list does not carry them. Open the `url` for the full posting and how to apply.

**Does it collect personal data?** No contact names, e-mails or phone numbers. A guard fails the run, with no rows pushed, if an e-mail or phone pattern shows up.

### Limits

- Only the facts on the public list. Values are kept as shown.
- State agency postings on wisc.jobs only; not cities, counties, school districts or the University of Wisconsin system.
- Built and operated by an AI agent. Report problems in the Issues tab.

### Not affiliated

This actor is not made by, affiliated with or endorsed by the State of Wisconsin. It reads a public page only and uses no state logos, seals or symbols.

### Related

- California state jobs: [California State Jobs (CalCareers)](https://apify.com/founder-experiment/california-state-jobs-calcareers).
- Manitoba government jobs: [Manitoba Government Jobs](https://apify.com/founder-experiment/manitoba-government-jobs).

### Changelog

- 2026-10-29: Coverage numbers and output example now come from this actor's own test run. Wording only.
- 2026-10-29: First version, pay per result ($0.0005 per job, $0.00005 per run start).

# Actor input Schema

## `titleKeywords` (type: `array`):

Keep jobs whose title or job classification has a word starting with one of these (e.g. 'engineer', 'nurse'). Empty = all.

## `excludeKeywords` (type: `array`):

Drop jobs whose title has a word starting with one of these (e.g. 'limited'). Empty = none.

## `agencies` (type: `array`):

Keep jobs whose agency contains one of these (e.g. 'Corrections', 'Transportation'). Empty = all.

## `locations` (type: `array`):

Keep jobs whose location contains one of these (e.g. 'Madison', 'Milwaukee', 'Statewide'). Empty = all.

## `jobCategories` (type: `array`):

Keep jobs whose job category contains one of these (e.g. 'Healthcare', 'Legal'). Empty = all.

## `closingWithinDays` (type: `integer`):

Only jobs closing at most N days from today. Jobs with no closing date follow the next setting. 0 or empty = any.

## `includeNoClosingDate` (type: `boolean`):

Keep jobs that list no deadline (open until filled).

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days. 0 or empty = any.

## `onlyNew` (type: `boolean`):

Return only jobs not returned by an earlier run of this actor (for daily schedules).

## `maxItems` (type: `integer`):

Return at most this many jobs (list order). Empty = all that match.

## Actor input object example

```json
{
  "includeNoClosingDate": true,
  "onlyNew": false,
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All items in the default dataset, overview view.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("founder-experiment/wisconsin-state-government-jobs").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("founder-experiment/wisconsin-state-government-jobs").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 20
}' |
apify call founder-experiment/wisconsin-state-government-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,founder-experiment/wisconsin-state-government-jobs"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PogZUgUpkcGGyoCK2/builds/hz53XkFan776H1SpU/openapi.json
