# Journalist Request Finder: HARO Alternative for Digital PR (`fayoussef/journalist-request-finder`) Actor

Find live journalist source requests in one feed, pulled from SourceBottle call-outs and #journorequest posts on Bluesky and Mastodon. Filter by your topics, sort by deadline, and schedule daily runs that return only new requests. No HARO account, no Qwoted login, no API keys.

- **URL**: https://apify.com/fayoussef/journalist-request-finder.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Categories:** News, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 journalist request delivereds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### What does Journalist Request Finder do?

**Journalist Request Finder** collects **live journalist source requests** into one structured feed you can filter, schedule and pipe anywhere. It scrapes every open call-out on [SourceBottle](https://www.sourcebottle.com/) across all twelve sections and pulls **#journorequest** posts from [Bluesky](https://bsky.app/) and Mastodon, then returns the outlet, the requester, the **pitch deadline** and a direct link to respond.

Since HARO (Connectively) shut down in December 2024, media requests have been scattered across a dozen paywalled platforms and hashtags. This Actor is the **free HARO alternative** that puts them back in one place. No HARO account, no Qwoted login, no API keys: every source it reads is public.

Because it runs on Apify you get scheduling, a REST API, webhooks, proxy rotation and one-click integrations with Slack, Google Sheets, Zapier, Make and n8n.

### Why use Journalist Request Finder?

- **Earn backlinks and press mentions.** Answering journalist requests is the highest-conversion tactic in digital PR and white-hat link building. This Actor finds the requests; you write the pitch.
- **Never miss a deadline.** Results are ranked by soonest deadline first, with `daysLeft` on every row, so the urgent ones sit at the top.
- **Get a daily alert, not a firehose.** Turn on **Only new requests** and each scheduled run returns only requests you have never seen before.
- **Filter to your expertise.** Add your topics and every request is tagged with the keywords it matched, so a client-facing shortlist takes seconds.
- **Feed your AI agent.** Call it through the Apify MCP server and let an agent triage requests, draft pitches and file them for review.
- **Replace a subscription.** Media-request platforms charge $99 to $500 per month. This runs on usage.

### How to use Journalist Request Finder

1. Click **Try for free** on the Actor page.
2. Type the topics you can speak on into **Your topics / expertise**, for example `cybersecurity`, `personal finance`, `SaaS`.
3. Press **Start**. A full scan of every section finishes in well under a minute.
4. Open the **Output** tab and switch to the **Pitch queue** view to see the full ask, your matched topics and the respond link side by side.
5. Optional: open **Schedules**, run it every morning, and switch **Only new requests** on so each run is a clean alert.

### Input

Nothing is required. Run it with no input at all and you get every open request. Configure it from the **Input** tab, or via JSON:

```json
{
  "keywords": ["SaaS", "cybersecurity", "small business"],
  "keywordsOnly": true,
  "onlyOpenDeadlines": true,
  "maxRequests": 200,
  "sources": ["sourcebottle", "bluesky"],
  "onlyNewRequests": false
}
````

| Input | What it does |
| --- | --- |
| `keywords` | Your topics. Matching requests are tagged and ranked to the top. |
| `keywordsOnly` | Drop everything that does not match one of your topics. |
| `onlyOpenDeadlines` | Hide requests whose deadline has passed. On by default. |
| `maxRequests` | How many requests to return. Free plan is capped at 25. |
| `sources` | `sourcebottle`, `bluesky`, `mastodon`. |
| `industries` | Narrow SourceBottle to specific sections. Empty scans all twelve. |
| `onlyNewRequests` | Return only requests not seen in earlier runs. Built for schedules. |

### Output

Each item is one media request. Download as **JSON, CSV, Excel, HTML or XML**, or pull it from the dataset API.

```json
{
  "source": "SourceBottle",
  "requestId": "sourcebottle:159974",
  "title": "URG: Concerned about the amount of AI tools used at work?",
  "summary": "Looking to speak with employees who feel their workplace has adopted AI tools too quickly, for a national news feature.",
  "url": "https://www.sourcebottle.com/query.asp?iid=70&qid=159974",
  "industry": "Technology",
  "requesterName": "National news outlet",
  "requesterType": "Journalist",
  "datePosted": "2026-07-21T00:00:00+00:00",
  "deadline": "2026-07-28T17:00:00+00:00",
  "deadlineText": "28 July 2026 @ 5pm",
  "daysLeft": 3,
  "isOpen": true,
  "matchedKeywords": ["AI"],
  "isNew": true,
  "scrapedAt": "2026-07-24T22:41:08+00:00"
}
```

### Data fields

| Field | Description |
| --- | --- |
| `source` | Where the request came from: SourceBottle, Bluesky or Mastodon. |
| `title` | Headline of the call-out, or the opening line of the post. |
| `summary` | The full request: what the journalist needs and from whom. |
| `url` | Direct link to respond. |
| `requesterName` | Outlet, publication or person asking. |
| `requesterType` | Journalist, Blogger, PR Pro, Event Manager, Podcaster, Author. |
| `industry` | SourceBottle section, or the hashtag it was found by. |
| `datePosted` | When the request was published, ISO 8601. |
| `deadline` / `deadlineText` | Pitch deadline, parsed and as originally printed. |
| `daysLeft` | Whole days until the deadline closes. |
| `isOpen` | Whether the deadline is still open. |
| `matchedKeywords` | Which of your topics the request mentions. |
| `authorHandle` / `authorUrl` | Social handle and profile, for Bluesky and Mastodon. |
| `isNew` | Whether this request is new since your last run. |

### How much does it cost to find journalist requests?

The Actor is priced **pay per event**: you pay for the requests it returns, not for runtime. A full scan of every section is fast and cheap because all three sources are plain HTTP with no browser rendering.

**Free plan users are capped at 25 requests per run.** To lift the cap and run it on a daily schedule, [subscribe to an Apify plan](https://apify.com/pricing?fpr=youssef).

### Tips for better results

- **Start broad, then narrow.** Run once with no keywords to see the shape of the board, then add your topics and switch `keywordsOnly` on.
- **Use singular root words.** `finance` matches "finance" and "financial planning" contexts better than `financial services` does.
- **Schedule it for early morning.** Journalists file call-outs with same-week deadlines, and the earliest pitches get read.
- **Watch `requesterType`.** `Journalist` and `Blogger` rows are editorial opportunities; `Event Manager` and `PR Pro` rows are usually product, prize or sponsorship asks.
- **Keep `onlyOpenDeadlines` on.** Expired requests are kept out of your way by default.

### FAQ

#### Is this a HARO alternative?

Yes. HARO, later renamed Connectively, was shut down by Cision in December 2024. This Actor rebuilds the same daily media-request feed from sources that are still public, so you get the requests without paying for a replacement platform.

#### Do I need a SourceBottle, Qwoted or HARO account?

No. Every source this Actor reads is publicly published. There is no login step and no API key to configure.

#### How fresh are the results?

They are fetched live on every run. SourceBottle call-outs carry an explicit deadline. Social posts rarely state one, so they are treated as open for 30 days after posting.

#### How do I only get new requests?

Turn on **Only new requests**. The Actor keeps a record of every request it has returned to your account and filters those out, which makes each scheduled run a clean alert.

#### Can I use this from an AI agent?

Yes. Call it through the **Apify MCP server** and an agent can search, filter and triage media requests as a tool, then draft responses against the `summary` field.

#### Is scraping journalist requests legal?

The Actor only reads publicly available pages and public APIs, and it collects no personal data beyond the contact identity a requester chose to publish alongside their call-out. You are responsible for how you use the output, including compliance with each platform's terms and with applicable data protection law. This is not legal advice.

### Support

Found a bug or a request source you want added? Open an issue on the **Issues** tab.

💼 Need a custom solution? Reach out at youssefarhan24@gmail.com
🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)

# Actor input Schema

## `keywords` (type: `array`):

The topics you can speak on, in plain words - e.g. `cybersecurity`, `personal finance`, `interior design`. Requests mentioning any of them are matched, tagged and ranked to the top. Leave empty to get every open request.

⚡ Unlock full pages and higher limits by subscribing to an [Apify plan](https://apify.com/pricing?fpr=youssef).
💼 Need a custom solution? Reach out at youssefarhan24@gmail.com
🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)

## `keywordsOnly` (type: `boolean`):

Drop every request that does not mention one of your keywords. Turn on once your keyword list is dialled in; leave off to also browse everything else that is open.

## `onlyOpenDeadlines` (type: `boolean`):

Keep only requests whose deadline has not passed. Social posts count as open for 30 days after they were posted, since journalists rarely state a deadline there.

## `maxRequests` (type: `integer`):

Stop after this many requests, most pitchable first. Free plan is capped at 25.

## `sources` (type: `array`):

Which public sources to pull from. All three are free and need no account. SourceBottle carries the structured call-outs with real deadlines and is where the volume is; Bluesky carries live #journorequest posts. Mastodon is off by default because the hashtag is only lightly used there.

## `industries` (type: `array`):

Narrow SourceBottle to specific sections. Leave empty to scan all twelve, which is usually what you want since journalists file requests under the section that fits their outlet, not your niche.

## `onlyNewRequests` (type: `boolean`):

The Actor remembers every request it has ever returned to you. Turn this on in a daily schedule to get only requests you have not seen before, so each run is a clean alert instead of the whole board.

## `proxyConfiguration` (type: `object`):

Optional. Every source is public, so a proxy is not required. Leave it on if you run frequently or from a blocked region.

## Actor input object example

```json
{
  "keywords": [
    "SaaS",
    "marketing",
    "small business"
  ],
  "keywordsOnly": false,
  "onlyOpenDeadlines": true,
  "maxRequests": 200,
  "sources": [
    "sourcebottle",
    "bluesky"
  ],
  "industries": [],
  "onlyNewRequests": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `requests` (type: `string`):

Every collected request, with the outlet, requester, deadline and a direct link to respond.

# 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 = {
    "keywords": [
        "SaaS",
        "marketing",
        "small business"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/journalist-request-finder").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 = { "keywords": [
        "SaaS",
        "marketing",
        "small business",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/journalist-request-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "SaaS",
    "marketing",
    "small business"
  ]
}' |
apify call fayoussef/journalist-request-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fayoussef/journalist-request-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Journalist Request Finder: HARO Alternative for Digital PR",
        "description": "Find live journalist source requests in one feed, pulled from SourceBottle call-outs and #journorequest posts on Bluesky and Mastodon. Filter by your topics, sort by deadline, and schedule daily runs that return only new requests. No HARO account, no Qwoted login, no API keys.",
        "version": "0.1",
        "x-build-id": "TtzNqTJActfmCPOvu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fayoussef~journalist-request-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fayoussef-journalist-request-finder",
                "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/fayoussef~journalist-request-finder/runs": {
            "post": {
                "operationId": "runs-sync-fayoussef-journalist-request-finder",
                "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/fayoussef~journalist-request-finder/run-sync": {
            "post": {
                "operationId": "run-sync-fayoussef-journalist-request-finder",
                "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": "Your topics / expertise",
                        "type": "array",
                        "description": "The topics you can speak on, in plain words - e.g. `cybersecurity`, `personal finance`, `interior design`. Requests mentioning any of them are matched, tagged and ranked to the top. Leave empty to get every open request.\n\n⚡ Unlock full pages and higher limits by subscribing to an [Apify plan](https://apify.com/pricing?fpr=youssef).\n💼 Need a custom solution? Reach out at youssefarhan24@gmail.com\n🌐 Got a site in mind? [Suggest it here](https://automationbyexperts.com/apify)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywordsOnly": {
                        "title": "Only requests matching my topics",
                        "type": "boolean",
                        "description": "Drop every request that does not mention one of your keywords. Turn on once your keyword list is dialled in; leave off to also browse everything else that is open.",
                        "default": false
                    },
                    "onlyOpenDeadlines": {
                        "title": "Hide expired requests",
                        "type": "boolean",
                        "description": "Keep only requests whose deadline has not passed. Social posts count as open for 30 days after they were posted, since journalists rarely state a deadline there.",
                        "default": true
                    },
                    "maxRequests": {
                        "title": "Max requests to return",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Stop after this many requests, most pitchable first. Free plan is capped at 25.",
                        "default": 200
                    },
                    "sources": {
                        "title": "Where to look",
                        "type": "array",
                        "description": "Which public sources to pull from. All three are free and need no account. SourceBottle carries the structured call-outs with real deadlines and is where the volume is; Bluesky carries live #journorequest posts. Mastodon is off by default because the hashtag is only lightly used there.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "sourcebottle",
                                "bluesky",
                                "mastodon"
                            ],
                            "enumTitles": [
                                "SourceBottle (journalist call-outs)",
                                "Bluesky (#journorequest)",
                                "Mastodon (#journorequest, sparse)"
                            ]
                        },
                        "default": [
                            "sourcebottle",
                            "bluesky"
                        ]
                    },
                    "industries": {
                        "title": "SourceBottle sections",
                        "type": "array",
                        "description": "Narrow SourceBottle to specific sections. Leave empty to scan all twelve, which is usually what you want since journalists file requests under the section that fits their outlet, not your niche.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "63",
                                "61",
                                "64",
                                "65",
                                "66",
                                "67",
                                "69",
                                "70",
                                "71",
                                "68",
                                "62",
                                "54"
                            ],
                            "enumTitles": [
                                "General",
                                "Business & Finance",
                                "Health & Wellbeing",
                                "Lifestyle, Food & Fashion",
                                "Parenting & Education",
                                "Professional Services",
                                "PR, Media & Marketing",
                                "Technology",
                                "Travel & Leisure",
                                "Property",
                                "Environment",
                                "Samples, Prizes & Sponsorship"
                            ]
                        },
                        "default": []
                    },
                    "onlyNewRequests": {
                        "title": "Only new requests (for scheduled runs)",
                        "type": "boolean",
                        "description": "The Actor remembers every request it has ever returned to you. Turn this on in a daily schedule to get only requests you have not seen before, so each run is a clean alert instead of the whole board.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Every source is public, so a proxy is not required. Leave it on if you run frequently or from a blocked region.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
