SourceBottle Journalist Requests Scraper avatar

SourceBottle Journalist Requests Scraper

Pricing

from $1.40 / 1,000 item extracteds

Go to Apify Store
SourceBottle Journalist Requests Scraper

SourceBottle Journalist Requests Scraper

Export public SourceBottle journalist call-outs, topics and deadlines for PR expert-source matching. Filter categories and keywords without accessing private contacts.

Pricing

from $1.40 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Export public SourceBottle journalist requests for recurring PR expert-source matching. Collect call-out titles, summaries, publication labels, countries, posting dates, deadlines and request-page links. Choose editorial categories and optionally match topic keywords.

This Actor reads SourceBottle only. It does not pitch journalists, retrieve private contact information, submit responses, or collect Bluesky/Mastodon posts.

Who is this for?

  • PR consultants building a daily shortlist for clients.
  • Subject-matter experts checking relevant public media opportunities.
  • Communications teams comparing request IDs in their own spreadsheet or database.

Why use it?

Keep public call-outs in structured rows instead of manually copying individual pages. Category selection narrows the source listing; keyword matching reduces the delivered shortlist. Request-ID deduplication prevents the same call-out appearing twice when it belongs to multiple selected categories.

The output preserves source dates rather than guessing timezones or silently discarding expired entries. A public publication label can be an agency, anonymous requester, or named outlet; it is not independently verified by this Actor.

Quick start

  1. Select one or more categories, or omit categories to scan all eleven editorial categories.
  2. Choose a country listing. Australia is the default.
  3. Optionally add topic keywords.
  4. Set the global request limit and page cap.
  5. Run and open the Requests dataset tab.
  6. Export JSON, CSV, Excel, or connect your normal Apify integration.

Example input:

{
"categories": ["Business & Finance"],
"country": "Australia",
"maxItems": 3,
"maxPagesPerCategory": 2
}

Input parameters

ParameterDefaultBehavior
categoriesAll elevenEditorial categories, exact supported names below. Duplicates are removed. Empty selection is invalid.
countryAustraliaSelects the public SourceBottle country listing, not a strict output-country text filter.
keywordsNo filterUp to 20 nonempty strings. ANY case-insensitive substring over title and summary; surrounding whitespace trimmed.
maxItems100Global accepted unique request limit, 1–1000, after filtering and deduplication.
maxPagesPerCategory10Listing-page cap per selected category, 1–50; stops sooner at exhaustion or global item limit.

There is no zero/unlimited option. Limits are upper bounds, not promised output counts. Keyword matching has no word boundaries: tax can match a longer word containing those letters. Multiple keywords use ANY, not ALL. No title-only, linguistic stemming, exact-field equality, or hidden AI matching is applied.

Supported categories: Business & Finance; Environment; General; Health & Wellbeing; Lifestyle, Food & Fashion; Parenting & Education; Professional Services; Property; PR, Media & Marketing; Technology; Travel & Leisure.

Country listings: Australia, New Zealand, UK & Republic of Ireland, Canada, United States, Singapore. A request's own country text is preserved even when a regional listing contains international requests.

Output fields

FieldMeaning
requestIdStable public SourceBottle call-out ID.
titleRequest title.
summaryPublic summary; null when absent.
publicationPublic outlet/requester label; null when absent.
countryCountry shown on the request; null when absent.
postingDateListing posting date in source text; null when absent.
deadlineRequest deadline in source text, including timezone when supplied; null when absent.
categoryFirst selected category where this request was found, not its exhaustive category membership.
requestUrlPublic request-page URL, not a private pitching/contact endpoint.
scrapedAtUTC extraction timestamp.

The default dataset contains one row per unique request ID. The SUMMARY key-value record contains request, byte, retry, scanned and saved counters. A partial dataset can remain if a later upstream request fails; a failed run is not a complete successful export.

Example result

A current public call-out returned by the Actor:

{
"requestId": "163169",
"title": "SMALL BUSINESSES to comment on tax changes + surcharge ban",
"summary": "Small business owners in Australia who would be keen: - to comment on changes to trusts, tax and the surcharge ban - to pose up for a photo - happy to provide specifics (how much money will be lost through changes, how much more you will charge, expense cost increases etc)",
"publication": "The Australian",
"country": "Australia",
"deadline": "24 October 2026 @ 5pm Eastern Daylight Saving Time",
"postingDate": "23 October 2026",
"category": "Business & Finance",
"requestUrl": "https://www.sourcebottle.com/query.asp?qid=163169",
"scrapedAt": "2026-10-25T15:07:17.196Z"
}

Public availability changes. This example is not a promise that the request is still accepting responses.

How much does it cost to export SourceBottle journalist requests?

Pay-per-event pricing charges a $0.002 start fee plus each unique exported request. Filtered-out, duplicate and failed requests have no item charge. A run finding no matches still incurs the start fee.

Apify Store spend tierPrice per request
FREE$0.0026795
BRONZE$0.00233
SILVER$0.0018174
GOLD$0.001398
PLATINUM$0.001398
DIAMOND$0.001398

At BRONZE, examples are $0.00433 for one request, $0.0253 for ten, and $0.235 for one hundred, including one start fee. Spend tiers follow your qualifying aggregate monthly Apify Store spend, not volume within this Actor. Check the Pricing tab for the tier applicable to your account. These examples estimate Actor event charges, not guaranteed final invoices.

Pagination and coverage

The Actor visits selected categories in input order and listing pages in source order. It stops when the global accepted-result limit is reached. Each source page currently contains up to twelve requests. When category coverage or page caps stop collection, increasing maxItems alone will not add more results.

The source can list expired call-outs. This Actor does not infer deadline expiry, normalize source timezone strings, promise historical completeness, or guarantee every country listing is exclusive to that country. Samples, prizes and sponsorship requests are excluded from the category selector.

Integrations

Export the dataset to Google Sheets for an editorial shortlist, send rows through Make or Zapier for team review, or load JSON into your CRM/data warehouse. Use requestId as the stable key when comparing scheduled runs.

Apify schedules can repeat the collection. Built-in only-new persistence, alerts and cross-run change detection are not provided; maintain those in your downstream system. Every scheduled invocation is independently billed for the rows it exports.

API usage

Use your Apify token privately. Start the Actor once, retain the returned run ID, then inspect that same run until terminal status. Read results only after checking success.

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~sourcebottle-journalist-requests/runs' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"categories":["Technology"],"maxItems":10}'

JavaScript client example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/sourcebottle-journalist-requests')
.call({ categories: ['Technology'], maxItems: 10 });
if (run.status !== 'SUCCEEDED') throw new Error(run.status);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 10 });
console.log(items);

Python:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/sourcebottle-journalist-requests').call(
run_input={'categories': ['Technology'], 'maxItems': 10})
if run['status'] != 'SUCCEEDED':
raise RuntimeError(run['status'])
print(client.dataset(run['defaultDatasetId']).list_items(limit=10).items)

MCP integration

For Claude Code:

claude mcp add --transport http apify \
'https://mcp.apify.com?tools=automation-lab/sourcebottle-journalist-requests'

Claude Desktop, Cursor, and VS Code: equivalent desktop/editor configuration:

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/sourcebottle-journalist-requests"}}}

Discover tool names and schemas using scoped tools/list. Actor selection also adds run/dataset/key-value-store/abort helpers, not exactly one tool. Discovery is read-only and does not authorize execution.

Example prompt: “Collect up to ten SourceBottle Technology requests and show their titles, outlets, deadlines and links.” For an authorized call, start once and retain run/status/storage IDs: IDs are metadata, not result rows. call-actor waits at most waitSecs 0–45 seconds (default 30); allow client transport margin beyond the chosen wait. If pending, follow get-actor-run for the SAME ID with 2/4/8-second backoff capped at 10 seconds and a total 120-second deadline. At the deadline report pending and the ID, rather than starting again. On timeout recover the known ID; if unknown, report uncertainty without blind retry.

After success, use get-dataset-items with defaultDatasetId, explicit limit, offset and needed fields. Example consumer budget: 20-row pages, at most 100 source rows and 64 KiB serialized UTF-8 content admitted to model context, whichever comes first. Enforce bytes host-side before injection, disclose omissions/oversized rows, and track source offsets rather than transformed row counts. If the client cannot intercept oversized responses, do not claim a hard byte guarantee. Report continuation offset and partial status when incomplete; keep full exports outside model context. This context budget does not change the Actor's collection limits. Discovery caching and model-visible token behavior depend on the client; no numeric savings are promised.

Legality and privacy

This independent tool is not affiliated with or endorsed by SourceBottle. It uses no AI at runtime. For support, open an issue on this Actor's Apify Store page.

Results and counters are retained in your Apify storage under your account's retention settings; delete datasets/KV records and runs from Console when no longer needed. The Actor has no persistent cookies, private contact cache, or external data recipient beyond Apify hosting and the disclosed private error service.

Use public request information only for lawful, relevant source matching. Respect the source's terms and applicable privacy rules. Respond through SourceBottle using its normal account workflow; the Actor does not bypass signup or submit pitches. Do not spam, infer private identities from anonymous labels, or treat publication labels as verified contact information.

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days.

Troubleshooting and FAQ

Why fewer records than maxItems? Source exhaustion, keyword filtering, duplicate IDs, or the per-category page cap may limit results. Try a broader category or remove keywords.

Why an expired deadline? Source listings may retain old requests. Deadline strings are exported faithfully; assess current suitability before responding.

Does it send email or retrieve contacts? No. It exports public call-out fields and the public request link only.

Can I provide arbitrary URLs? No. This Actor accepts the documented categories and country listings only.

What happens on a source error? Network, 429 and server failures receive up to three total attempts with backoff. Permanent HTTP errors and unrecognized pages fail honestly. No paid proxy or browser fallback runs automatically.

This is intentionally a standalone SourceBottle collection tool. General contact/domain finders do not replace public journalist requests. Use your own dataset comparison and CRM integrations for follow-up rather than assuming contact enrichment is included.