# 360Giving UK Grants Scraper (`publicmoney/threesixtygiving-grants-scraper`) Actor

Extract UK charitable and public grants published to the 360Giving standard: grants made by any funder, grants received by any recipient, and the organisation directory with funder and recipient totals.

- **URL**: https://apify.com/publicmoney/threesixtygiving-grants-scraper.md
- **Developed by:** [Public Money](https://apify.com/publicmoney) (Apify)
- **Categories:** Business
- **Stats:** 1 total users, 0 monthly users, 50.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 grants

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

## 360Giving UK Grants Scraper

Reads UK grants published to the [360Giving](https://www.threesixtygiving.org/) open data standard through the 360Giving organisation API (`api.threesixtygiving.org/api/v1/`). One record per grant, with every field the publisher released. No API key needed.

### Source

| Route | Returns |
| --- | --- |
| `/api/v1/org/<id>/grants_made/` | Every grant an organisation made as a funder |
| `/api/v1/org/<id>/grants_received/` | Every grant an organisation received |
| `/api/v1/org/<id>/` | One organisation: name, linked ids, grant count, first and last grant date and per-currency totals as funder and as recipient |
| `/api/v1/org/` | The organisation directory: id and name, about 458,000 entries |

Paged with `limit` and `offset`. Verified 2026-10-04: The Blagrave Trust (`GB-CHC-1164021`) has made 627 grants and received 20; BBC Children in Need (`GB-CHC-802052`) has made 7,864.

### Input

| Field | Type | What it does |
| --- | --- | --- |
| `funderIds` | array | Organisation ids of funders; every grant each has made is returned |
| `recipientIds` | array | Organisation ids of recipients; every grant each has received is returned |
| `organisationIds` | array | One organisation profile record per id |
| `listOrganisations` | boolean | Return the organisation directory, to discover ids |
| `organisationListOffset` | integer | Where in the directory to start |
| `maxItems` | integer | Cap on records written, 0 for all. Default 500 |
| `schemaOrg` | boolean | Append a schema.org `MonetaryGrant` block to each record |

At least one of `funderIds`, `recipientIds`, `organisationIds` or `listOrganisations` is required. Organisation ids look like `GB-CHC-1164021` (a charity number) or `GB-COH-12864629` (a company number); GrantNav organisation pages sit at `grantnav.threesixtygiving.org/org/<id>`.

### Output

Grant records (`recordType: "grant"`) carry every key from the 360Giving grant as published — `id`, `title`, `description`, `currency`, `amountAwarded`, `awardDate`, `dateModified`, `dataSource`, `plannedDates`, `grantProgramme`, `beneficiaryLocation`, `fundingOrganization`, `recipientOrganization`, and any other field a publisher includes — plus:

- `grantId`, `queriedOrgId`, `queriedAs` (`funder` or `recipient`)
- `funderOrgId`, `funderName`, `recipientOrgId`, `recipientName`, `grantProgrammeTitle` — the first entry of the matching array
- `publisherOrgId`, `funderOrgIds`, `recipientOrgIds`, `dataLicense`, `additionalDataMetadata`
- `grantUrl` — the grant's GrantNav page

Organisation records (`recordType: "organisation"`) carry `orgId`, `name`, `funder`, `recipient`, `publisher`, `linkedOrgs`, `apiUrl`, `grantsMadeApiUrl`, `grantsReceivedApiUrl` and `grantNavUrl`.

### Gotchas

- The API has no date, amount or keyword filter. `search`, `ordering`, `awardDate__gte` and `page` are accepted on the grant lists and ignored; `search`, `q`, `name`, `org_id` and `ordering` are ignored on the directory. A run returns an organisation's full grant history.
- An id the API does not hold answers 404; the run logs it and moves on.
- Directory entries carry only id and name; `funder`, `recipient`, `publisher` and `linkedOrgs` are null there. Ask for the id in `organisationIds` to get them.
- `grantProgrammeTitle` is null when the publisher names no programme.
- A grant appears once per queried organisation, so asking for both its funder and its recipient returns it twice.

# Actor input Schema

## `funderIds` (type: `array`):

360Giving organisation ids of funders. Every grant each one has made is returned. Examples: 'GB-CHC-1164021' (The Blagrave Trust, 627 grants), 'GB-CHC-802052' (BBC Children in Need, 7,864 grants). Find ids with listOrganisations or on GrantNav.

## `recipientIds` (type: `array`):

360Giving organisation ids of grant recipients. Every grant each one has received is returned. Example: 'GB-CHC-1164021' (20 grants received).

## `organisationIds` (type: `array`):

Organisation ids to return one profile record each: name, linked organisations, and grant count, first and last grant date and per-currency totals as a funder and as a recipient.

## `listOrganisations` (type: `boolean`):

Returns the 360Giving organisation directory (org id and name, about 458,000 entries) so ids can be discovered. Capped by Max items.

## `organisationListOffset` (type: `integer`):

Position in the organisation directory to start from when listing it. Examples: 0, 10000.

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

Caps how many records are written to the dataset, and so caps the cost. Examples: 1, 500, 10000. Set to 0 for everything. Default is 500.

## `schemaOrg` (type: `boolean`):

Appends a `schemaOrg` object to the end of every record, mapping it to schema.org (MonetaryGrant). The record's own fields are not changed. Off by default. Charged once per run, not per record.

## Actor input object example

```json
{
  "funderIds": [
    "GB-CHC-1164021"
  ],
  "listOrganisations": false,
  "organisationListOffset": 0,
  "maxItems": 500,
  "schemaOrg": false
}
```

# Actor output Schema

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

Grants and organisations matched by the run, one item per record, in the default dataset.

# 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 = {
    "funderIds": [
        "GB-CHC-1164021"
    ],
    "maxItems": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("publicmoney/threesixtygiving-grants-scraper").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 = {
    "funderIds": ["GB-CHC-1164021"],
    "maxItems": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("publicmoney/threesixtygiving-grants-scraper").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 '{
  "funderIds": [
    "GB-CHC-1164021"
  ],
  "maxItems": 500
}' |
apify call publicmoney/threesixtygiving-grants-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicmoney/threesixtygiving-grants-scraper"
        }
    }
}
```

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/jdBIQIvmFwfyS6GTd/builds/TaE1UQ0DqLfDiWYOG/openapi.json
