# UK 360Giving Grant Datasets Scraper (`nexgenwatch/uk-360giving-dataset-publication-watch`) Actor

Scrape UK 360Giving published grant datasets: publisher, dataset, grants count and publication date. Every run returns the current records as a dataset. Optional watch mode returns only what changed since your last run. Pay per result.

- **URL**: https://apify.com/nexgenwatch/uk-360giving-dataset-publication-watch.md
- **Developed by:** [NexGen Watch](https://apify.com/nexgenwatch) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $67.00 / 1,000 dataset-publication deltas

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🎓 UK 360Giving Grant Datasets Scraper

**Scrape UK 360Giving published grant datasets: publisher, dataset, grants count and publication date.** Run it once and you get the current records as a dataset — that is the default. Turn on watch mode and a scheduled run returns only what changed since the last run (see *Optional: run it on a schedule*).

UK grantmakers publishing and republishing their grants data to the 360Giving Standard: who published, what changed, the licence, and a direct link to the file. Withdrawals are reported too - a dataset leaving the registry is a take-down signal you need, not a row to drop quietly.

Output is one `g360_record` row per result; billing is pay-per-event, the value event being one dataset-publication delta (a $0.02 start fee per run, then $0.10 per dataset-publication delta plus one $0.10 source check per run that reads the source). Source: registry.threesixtygiving.org, www.threesixtygiving.org.

No login, no API key and no CAPTCHA solving are involved: the source is read logged-out with an identified contact User-Agent.

**Who buys this**

Buyers usually search for **360Giving** or **UK grants data**.

- Grant consultants and research-development offices tracking 360Giving.
- Universities, nonprofits and companies watching UK grants data relevant to their field.
- Analysts and journalists following where public funding goes.

### 📊 Sample Output

[![UK 360Giving Grant Datasets Scraper sample output — a table of real dataset-publication delta rows (dataset_id, title, publisher_name, publisher_prefix) from run wVD2sFgw7fbebuDB7 on build 0.1.20](https://api.apify.com/v2/key-value-stores/80Y7h3rmVN5CWK7Mw/records/uk-360giving-dataset-publication-watch-sample-nw)](https://apify.com/nexgenwatch/uk-360giving-dataset-publication-watch?fpr=2ayu9b)

Real rows from run `wVD2sFgw7fbebuDB7` on build 0.1.20 (2026-09-28), the same input as the Quick start below — every value is as the source published it (emails masked, long text shortened):

| dataset_id | title | publisher_name | publisher_prefix | publisher_org_id | publisher_website |
|---|---|---|---|---|---|
| a003W000004m3KEQAY | Home from Hospital Targeted Investment Fund grants | 10GM | 360G-10GM | 360G-10GM | https://www.10gm.org.uk/index.html |
| a001p00000zgyHZAAY | Open Programme grants awarded since 2013 | A B Charitable Trust | 360G-ABCT | GB-COH-IP030662 | https://abcharitabletrust.org.uk/ |
| a003W0000074tgxQAA | 2022 Spring Grants Round | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |
| a003W000004sztpQAA | 2021/22 ATJF National Grant | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |
| a003W0000074thLQAQ | 2022 Community Justice Fund Crisis Fund | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |
| a00P400000szW7CIAU | Improving Lives Through Advice 2026 | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |
| a003W0000074tgtQAA | 2022 Help Accessing Legal Support | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |
| a003W0000074tgsQAA | 2021 Community Justice Fund Bridging Fund | Access to Justice Foundation | 360G-ATJF | GB-CHC-1056043 | https://atjf.org.uk/ |

The run finished with the status message: `PARTIAL: emitted 25 item(s); PREVIEW: snapshot output is capped at 25 record(s); 863 further record(s) withheld. Use watch mode for the full change feed.`

### ✅ What you get

One row per record delivered by UK 360Giving Dataset Publication Watch; in watch mode a delta row carries delta_type, before, after and changed_fields. Field names come from the actor's real output; fields the source does not publish are null.

Each row is flat JSON with these fields (from the dataset schema and the sample run; a field the source does not publish for a given row is `null`):

- `record_key` (string/null) — e.g. `360g:a003W000004m3KEQAY|https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targ`
- `dataset_id` (string/number/integer/boolean/null) — e.g. `a003W000004m3KEQAY`
- `title` (string/number/integer/boolean/null) — e.g. `Home from Hospital Targeted Investment Fund grants`
- `publisher_name` (string/number/integer/boolean/null) — e.g. `10GM`
- `publisher_prefix` (string/number/integer/boolean/null) — e.g. `360G-10GM`
- `publisher_org_id` (string/number/integer/boolean/null) — e.g. `360G-10GM`
- `publisher_website` (string/number/integer/boolean/null) — e.g. `https://www.10gm.org.uk/index.html`
- `last_published` (string/number/integer/boolean/null) — e.g. `2023-03-28`
- `license` (string/number/integer/boolean/null) — e.g. `https://creativecommons.org/licenses/by/4.0/`
- `license_name` (string/number/integer/boolean/null) — e.g. `Creative Commons Attribution 4.0 International (CC BY 4.0)`
- `issued` (string/number/integer/boolean/null) — e.g. `2023-03-27`
- `modified` (string/number/integer/boolean/null) — e.g. `2025-02-11T14:13:07.000+0000`
- `download_url` (string/number/integer/boolean/null) — e.g. `https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targeted-InvestmentFundGrant`
- `access_url` (string/number/integer/boolean/null) — e.g. `https://10gm.org.uk/10gms-work/home-from-hospital-targeted-investment-fund/`
- `file_format` (string/number/integer/boolean/null) — e.g. `xlsx`
- `take_down_policy` (string/number/integer/boolean/null) — e.g. `https://www.threesixtygiving.org/take-down-policy/`
- `record_type` (string) — e.g. `g360_record`
- `delta_type` (string/null) — null in every sample row
- `before` (object/array/string/number/integer/boolean/null) — null in every sample row
- `after` (object/array/string/number/integer/boolean/null) — null in every sample row
- `changed_fields` (array/object/string/null) — null in every sample row
- `observed_at` (string/null) — null in every sample row

**✅ What you get**

**✅ What you get**

**✅ What you get**

- `record_key` (string/null) — e.g. `360g:a003W000004m3KEQAY|https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targ`
- `dataset_id` — e.g. `a003W000004m3KEQAY`
- `title` — e.g. `Home from Hospital Targeted Investment Fund grants`
- `publisher_name` — e.g. `10GM`
- `publisher_prefix` — e.g. `360G-10GM`
- `publisher_org_id` — e.g. `360G-10GM`
- `publisher_website` — e.g. `https://www.10gm.org.uk/index.html`
- `last_published` — e.g. `2023-03-28`
- `license` — e.g. `https://creativecommons.org/licenses/by/4.0/`
- `license_name` — e.g. `Creative Commons Attribution 4.0 International (CC BY 4.0)`
- `issued` — e.g. `2023-03-27`
- `modified` — e.g. `2025-02-11T14:13:07.000+0000`
- `download_url` — e.g. `https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targeted-InvestmentFundGrant`
- `access_url` — e.g. `https://10gm.org.uk/10gms-work/home-from-hospital-targeted-investment-fund/`
- `file_format` — e.g. `xlsx`
- `take_down_policy` — e.g. `https://www.threesixtygiving.org/take-down-policy/`
- `record_type` (string) — e.g. `g360_record`
- `delta_type` (string/null) — null in every sample row

Every run also writes a `RUN_RECEIPT` record to its key-value store with the source checks it made and the counts it charged — diagnostics never land in the paid dataset.

### ⚙️ Sample inputs

**1. Quick start — the Store example (this is what the sample above came from)**

```json
{
  "watch_mode": false,
  "baseline_id": "default",
  "formats": []
}
```

The sample run charged exactly: 1 × $0.02 apify-actor-start + 1 × $0.10 source-check + 0 × $0.10 g360-delta = **$0.12** on the Free tier — snapshot preview rows are delivered unbilled; only the source check and the start fee were charged.

**2. Optional watch mode (changes only, for a schedule)**

```json
{
  "watch_mode": true,
  "baseline_id": "default",
  "formats": []
}
```

The first run seeds a private baseline and emits zero deltas; every later run emits one row per change, billed at $0.10 each plus the $0.10 source check; billed deltas are capped at 500 per run.

### 🧾 JSON sample record

One real record from run `wVD2sFgw7fbebuDB7`, exactly as it lands in the dataset (emails masked, long text shortened):

```json
{
  "record_key": "360g:a003W000004m3KEQAY|https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targeted-InvestmentFundGrantRecipientsv1_360Givingdata.xlsx",
  "dataset_id": "a003W000004m3KEQAY",
  "title": "Home from Hospital Targeted Investment Fund grants",
  "publisher_name": "10GM",
  "publisher_prefix": "360G-10GM",
  "publisher_org_id": "360G-10GM",
  "publisher_website": "https://www.10gm.org.uk/index.html",
  "last_published": "2023-03-28",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "license_name": "Creative Commons Attribution 4.0 International (CC BY 4.0)",
  "issued": "2023-03-27",
  "modified": "2025-02-11T14:13:07.000+0000",
  "download_url": "https://10gm.org.uk/wp-content/uploads/2024/09/10GM-Targeted-InvestmentFundGrantRecipientsv1_360Givingdata.xlsx",
  "access_url": "https://10gm.org.uk/10gms-work/home-from-hospital-targeted-investment-fund/",
  "file_format": "xlsx",
  "take_down_policy": "https://www.threesixtygiving.org/take-down-policy/",
  "record_type": "g360_record",
  "schema_version": "1.0",
  "output_mode": "preview",
  "preview_cap": 25,
  "preview_truncated": 863
}
```

### 🔧 How it works

**Source.** The actor reads registry.threesixtygiving.org, www.threesixtygiving.org — endpoints: `https://registry.threesixtygiving.org/data.json`, `https://www.threesixtygiving.org/take-down-policy/`. Public pages and feeds only; nothing behind a login.

**Transport.** Plain HTTPS from the Apify platform, no proxy. robots.txt is read first and a disallowed path is never fetched. Every request carries an identified contact User-Agent.

**Watch semantics.** Snapshot mode (`watch_mode: false`) returns a preview capped at 25 records. Watch mode keys every record on a source-native id, stores a private baseline in a named key-value store, and on each later run emits one delta row per change (new / changed / removed). A blocked fetch is never diffed, so a source outage cannot show up as a mass removal.

**Terminal states.** A run ends NORMAL, CAPPED (your cap was reached), PARTIAL (something was withheld and the message says what), GENUINE_EMPTY (the source was read and truly had nothing in scope) or BLOCKED (the source refused or changed shape — the run FAILS loud and bills nothing). A zero-row run is never reported as a silent success.

**Charging.** Each dataset-publication delta is charged at the moment it is pushed (`g360-delta`); a row that fails to charge is not delivered, so the dataset count always equals the charged count. One `source-check` is charged per run that actually read the source.

**🔧 How it works**

**🔧 How it works**

**🔧 How it works**

**Source and the routes that are CLOSED**

`https://registry.threesixtygiving.org/data.json` - public, logged-out, no key, HTTP 200,
745,926 bytes. 360Giving's own take-down policy names this feed: *"These links are curated by
360Giving on the 360Giving Data Quality Dashboard and as a JSON feed."*

Probed 2026-07-29 and **not** used, with the reason:

| route | why not |
|---|---|
| GrantNav `/search`, `/recipients`, `/funders` | `robots.txt` **Disallow** for `User-agent: *` |
| `analytics.threesixtygiving.org` | `robots.txt` **Disallow: /** |
| `store.data.threesixtygiving.org` | **HTTP 401** on every path, including its robots.txt |

Measured on the registry: **873 datasets, 292 publishers**, every entry carrying a `modified`
timestamp. Licences: CC BY 4.0 696, OGL 3.0 121, CC BY-SA 4.0 35, CC0 21.

**Rate: 2 requests per second, strictly**

360Giving asks for no more than two requests a second. Every call this Actor makes goes
through a token bucket whose capacity is pinned to **one** token, so the first request goes
immediately and every one after it waits the full interval. A bucket that starts full is not a
limiter - it passes its whole capacity instantly, which is how an earlier actor in this catalog
sent 13.3 req/s against an 8/s cap.

**Take-down and retention - YOUR duty, not just ours**

360Giving's take-down policy is explicit that once data is open it *"may be taken and used by
different people in different applications that are beyond 360Giving's control"*, and that
when a take-down happens they *"will notify the owners of any of the online applications ...
and advise them on any actions they may need to take"*.

If you cache what this Actor emits, **you are one of those applications.** So:

- a dataset or grant that disappears from the source is emitted as a **`REMOVED` delta with
  `is_withdrawal: true`** - never dropped quietly, because you are the one who has to act;
- every record carries `take_down_policy` linking 360Giving's policy;
- every record carries `license_name`; most of this data is CC BY 4.0 and **attribution is a
  licence condition**, not a courtesy;
- grant records name identifiable individuals and organisations. Deleting on withdrawal is a
  data-protection obligation you inherit with the copy.

Read the policy: `https://www.threesixtygiving.org/take-down-policy/`

**Snapshot mode is a PREVIEW**

`watch_mode: false` returns at most **25 records**, hard-capped in code and labelled
`output_mode: "preview"`. This Actor sells change detection, not bulk export.

**Watch semantics**

The first watch run stores a private baseline and emits **zero** deltas. Billed deltas are
capped at 500 per run; the overflow is a named PARTIAL withholding, never billed, and
re-detected next run.

**One slice per Actor**

This Actor emits **dataset-publication** and nothing else. Its sibling reads 360Giving for the other
slice, each with its own baseline and its own price.

**Terminal states**

`NORMAL` - `SUCCEEDED-0: GENUINE_EMPTY` - `SUCCEEDED-0` (no change) - `PARTIAL` - `BLOCKED`.
A zero with no evidence FAILS loud. A funder name that matches nothing FAILS naming the
registry, and a file that arrives and does not parse FAILS naming what arrived - neither is
ever reported as an empty source.

**What is not done.** No login, no cookie or CAPTCHA bypass, no private or personal-account data, no browser automation.

**⏰ Optional: run it on a schedule**

A single run returns the current records. If you also want to be told what changed over time, open the actor in Apify Console → **Schedules** → **Create new**, add this actor with input 3 above (`watch_mode: true`) so each run returns only the changes, and pick a cadence:

- **Daily** — `0 7 * * *` (07:00 UTC): catch changes within a day.
- **Weekly** — `0 7 * * 1`: a Monday digest.

The baseline persists in a named key-value store between runs, so every scheduled run compares against the last one; use a different `baseline_id` for independent watches. Schedules can also POST results to a webhook (Console → Integrations).

### ⏰ Optional: run it on a schedule

A single run returns the current records. If you also want to be told what changed over time, open the actor in Apify Console → **Schedules** → **Create new**, add this actor with the watch-mode input above (`watch_mode: true`) so each run returns only the changes, and pick a cadence:

### 💰 Pricing example

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Actor Start (`apify-actor-start`) | $0.02 | $0.02 | $0.02 | $0.02 |
| Source check (`source-check`) | $0.10 | $0.09 | $0.08 | $0.067 |
| Dataset-publication delta (`g360-delta`) | $0.10 | $0.09 | $0.08 | $0.067 |

Worked at the live Free-tier price (watch mode, one delta per change):

- 8 dataset-publication deltas: $0.02 start + $0.10 source check + 8 × $0.10 = **$0.92**
- 25 dataset-publication deltas: $0.02 start + $0.10 source check + 25 × $0.10 = **$2.62**
- 100 dataset-publication deltas: $0.02 start + $0.10 source check + 100 × $0.10 = **$10.12**

A run that delivers zero rows charges the $0.02 start fee plus the $0.10 source check (the source was read and reported empty). A BLOCKED run (source refused) fails loud and charges no value event. The start fee is charged once per GB of run memory; the default run memory is 1024 MB.

Yield on the sample run: `PARTIAL: emitted 25 item(s); PREVIEW: snapshot output is capped at 25 record(s); 863 further record(s) withheld. Use watch mode for the full change feed.`. Snapshot output is capped at 25 records regardless of the cap you set; watch mode is the full feed.

### ⚖️ Legal & ToS

This actor reads public, logged-out pages and feeds published by registry.threesixtygiving.org, www.threesixtygiving.org. It collects only what the source publishes to any visitor, keeps to the source's robots rules (checked on every run), identifies itself with a contact User-Agent, and does not access accounts, private data or anything behind authentication. Use the output in line with the source's terms and your local law; the intended use is B2B research and monitoring.

### ❓ FAQ

**Q: Do I need an API key or a login?**\
A: No. The source (registry.threesixtygiving.org, www.threesixtygiving.org) is read logged-out; the input schema has no key field and the actor carries no secrets.

**Q: Why did my run return 0 rows?**\
A: Read the run's status message. GENUINE_EMPTY means the source was read and had nothing in scope for your input (in watch mode the first run always seeds the baseline and returns zero deltas); BLOCKED means the source refused and the run failed without billing a value event — retry later or narrow the input. A zero-row run bills the start fee plus one source check.

**Q: What does watch mode remember between runs?**\
A: A private baseline of source-native record ids in a named key-value store (`baseline_id` names it, so several independent watches can coexist). Each later run diffs the live source against it and emits only changes.

**Q: How fresh is the data?**\
A: Every run reads the source live at run time; nothing is cached between runs except the watch baseline. Put it on a schedule for a continuous feed.

**Q: What formats can I export?**\
A: The dataset downloads as JSON, CSV, Excel, XML or RSS from the run's Dataset tab or the Apify API, and any run can push to a webhook or integration.

**Q: How is this different from the other grant and research-funding scrapers actors?**\
A: Same output shape and billing model; this one covers registry.threesixtygiving.org, www.threesixtygiving.org. The siblings under **Related Actors** cover the other sources or slices — run several on one schedule for a combined feed.

**Q: Are there rate limits?**\
A: The actor paces itself against the source and honours its robots rules; there is no per-buyer limit beyond your Apify plan's concurrency.

### 🆘 Troubleshooting

- **Run FAILED with BLOCKED** → the source refused the request or changed its page shape → nothing was billed beyond the start fee; retry after a while, and if it persists open an Issue with the run id.
- **Fewer rows than expected** → the source had fewer items in scope → widen the input.
- **Input validation error on start** → a field is outside the schema's allowed values → start from the Quick start block and change one field at a time.
- **Run TIMED-OUT** → a very wide request on a slow day → raise the run timeout in Run options or narrow the input; what was delivered before the timeout is still in the dataset.
- **First watch run shows no deltas** → expected: it seeds the baseline; changes appear from the second run.

### 🔗 Related Actors

- [NIH RePORTER Grant Awards Scraper](https://apify.com/nexgenwatch/nih-reporter-grant-award-delta?fpr=2ayu9b) — Scrape NIH RePORTER grant awards: project, PI, organization, amount, mechanism and award changes. Every run returns the current records as a dataset.…
- [US NSF Research Awards Scraper](https://apify.com/nexgenwatch/nsf-award-change-watch?fpr=2ayu9b) — Scrape US NSF research awards: PI, institution, program, amount, dates and funding changes. Every run returns the current records as a dataset. Optio…
- [SBIR/STTR Award Intelligence Scraper](https://apify.com/nexgenwatch/sbir-sttr-award-intelligence?fpr=2ayu9b) — One structured fundingintelligence per record from the robots-permitted sbir.gov HTML award search (cross-agency, all participating agencies). Public…
- [UK 360Giving Funder Grants Scraper](https://apify.com/nexgenwatch/uk-360giving-funder-grant-watch?fpr=2ayu9b) — Scrape UK grants by funder from 360Giving: recipient, amount, purpose and award date. Every run returns the current records as a dataset. Optional wa…
- [UK Find a Grant Opportunities Scraper](https://apify.com/nexgenwatch/uk-grants-watch?fpr=2ayu9b) — Scrape UK Find a Grant funding opportunities: funder, title, amount, eligibility and closing date. Every run returns the current records as a dataset…
- [UKRI Awards by Principal Investigator Scraper](https://apify.com/nexgenwatch/uk-ukri-investigator-award-watch?fpr=2ayu9b) — Scrape UKRI research awards by principal investigator: project, organisation, funder, amount and dates. Every run returns the current records as a da…
- 🏢 **About NexGen Watch** — NexGen Watch is a catalog of more than 300 public data actors built on official sources, pay-per-result. Browse the catalog at [apify.com/nexgenwatch](https://apify.com/nexgenwatch?fpr=2ayu9b).

### ⭐ Found this useful?

If this actor saved you a manual check, a quick **[review on the Apify Store](https://apify.com/nexgenwatch/uk-360giving-dataset-publication-watch?fpr=2ayu9b)** helps other teams find it. Feature request or a source that changed? Open it from the **Issues** tab — every one is read.

# Actor input Schema

## `funder` (type: `string`):

Optional. Narrow the watch to one grantmaker by name, 360Giving prefix or org id, matched case-insensitively across the 292 publishers in the registry. Leave empty to watch all 873 registered datasets.

## `watch_mode` (type: `boolean`):

On: emit CHANGES against a stored baseline (the product). Off: a labelled PREVIEW of at most 25 records, which is not an export path. Off by default: a run without this flag returns the current records.

## `baseline_id` (type: `string`):

Names the stored baseline so different filter combinations can be watched independently without their baselines colliding.

## `license_contains` (type: `string`):

Keep only datasets whose licence name contains this text. Measured 2026-07-29: CC BY 4.0 696, OGL 3.0 121, CC BY-SA 4.0 35, CC0 21.

## `formats` (type: `array`):

Keep only datasets published in these formats. Measured: xlsx 643, json 32, csv 21, ods 11, and 151 with no file extension.

## Actor input object example

```json
{
  "funder": "",
  "watch_mode": false,
  "baseline_id": "default",
  "license_contains": "",
  "formats": []
}
```

# Actor output Schema

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

No description

# 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 = {
    "funder": "",
    "watch_mode": false,
    "baseline_id": "default",
    "license_contains": "",
    "formats": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgenwatch/uk-360giving-dataset-publication-watch").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 = {
    "funder": "",
    "watch_mode": False,
    "baseline_id": "default",
    "license_contains": "",
    "formats": [],
}

# Run the Actor and wait for it to finish
run = client.actor("nexgenwatch/uk-360giving-dataset-publication-watch").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 '{
  "funder": "",
  "watch_mode": false,
  "baseline_id": "default",
  "license_contains": "",
  "formats": []
}' |
apify call nexgenwatch/uk-360giving-dataset-publication-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgenwatch/uk-360giving-dataset-publication-watch"
        }
    }
}
```

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/FM5dk0od9MCvDgF0H/builds/uyncsAbX0QlAupfo1/openapi.json
