Nostr Scraper — Search, Profiles, Posts & Feed avatar

Nostr Scraper — Search, Profiles, Posts & Feed

Pricing

from $0.005 / actor start

Go to Apify Store
Nostr Scraper — Search, Profiles, Posts & Feed

Nostr Scraper — Search, Profiles, Posts & Feed

Extract public Nostr posts and profiles from decentralized relays. Search keywords, collect user posts, or read the global feed. Supports hex public keys, NIP-05 usernames and custom relays. No Nostr login required.

Pricing

from $0.005 / actor start

Rating

0.0

(0)

Developer

Felix GoldWin

Felix GoldWin

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

10 days ago

Last modified

Share

Search public Nostr posts and profiles

Nostr Scraper — Search, Profiles, Posts & Feed retrieves public posts and profile information from selected Nostr relays.

The Actor reads public relay data without a Nostr login.

Choose a mode

ModeWhat it does
searchFetches up to 200 posts per relay and keeps those containing your query, ignoring case. Stops at maxItems total saved rows.
profileRetrieves profile metadata for the first 50 supplied/resolved public keys, up to maxItems rows per relay.
postsRetrieves posts from supplied/resolved users, sharing a maxItems allowance across users on each relay.
feedRetrieves up to maxItems recent posts from each selected relay.

Search matches the whole query as a substring: bitcoin lightning matches that phrase in that order. It does not use NIP-50, Boolean operators, or a full-history search index. Relays are queried sequentially, so earlier relays can fill the search limit before later ones are queried.

Quick start: monitor a keyword

Open the Input tab, switch to JSON, and paste:

{
"mode": "search",
"searchQuery": "bitcoin",
"maxItems": 50,
"relays": []
}
  1. Replace bitcoin with your keyword and review the run settings and pricing.
  2. Start the Actor, then inspect its dataset and run log.
  3. Save the input as an Apify Task. To repeat it, add that Task to an Apify Schedule, choose a frequency and timezone, and enable the schedule.
  4. Download the results or retrieve the dataset through the API. Use post id values in your consumer to suppress repeated alerts.

Each scheduled run is a new bounded search with its own start charge. Empty results do not establish that a keyword was absent from Nostr.

Input options

InputHow to use it
modeRequired: search, profile, posts, or feed; default feed.
searchQueryCase-insensitive substring to find in post content.
npubsUse 64-character lowercase hex public keys for profile/posts modes. Encoded npub1… input is not decoded.
usernamesNIP-05 identifiers such as user@example.com, resolved to public keys.
maxItemsInteger 1–500, default 50. Total cap in search; per-relay allowance in other modes.
relaysCustom wss:// URLs; [] uses defaults. Clear prefilled entries when you want the default pool.

The default pool is relay.damus.io, nos.lol, relay.nostr.band, relay.primal.net, nostr.mom, and relay.snort.social. A custom list replaces it. NIP-05 resolution depends on the identifier's domain responding.

Result-count distinction: with six default relays and maxItems: 50, feed, profile, or posts mode can save up to 300 rows. Search stops at 50 total rows. Duplicate rows count toward these limits and result charges.

Output and integrations

Post rows contain id, pubkey, npub, content, createdAt, sig, hashtags, mentions, referencedEvents, referencedPubkeys, and scrapedAt. The mentions array is currently always empty; tagged public keys appear in referencedPubkeys.

Profile rows contain pubkey, npub, name, displayName, about, picture, banner, website, nip05, lud16, createdAt, and scrapedAt. Profiles do not include an event ID or signature.

createdAt is the event's creation time converted from Unix seconds to a UTC ISO 8601 string; it is null when the source timestamp is missing or zero. scrapedAt is the UTC processing time. Missing profile metadata keys normally become empty strings; explicit null values can remain null.

Synthetic example, produced offline by the captured transform. Dummy IDs and key; no signature; processing time fixed for testing. This is not a historical run or valid signed event.

{
"id": "1111111111111111111111111111111111111111111111111111111111111111",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
"npub": "npub1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzqujme",
"content": "Tracking bitcoin development updates.",
"createdAt": "2026-10-14T11:00:00+00:00",
"sig": "",
"hashtags": ["bitcoin"],
"mentions": [],
"referencedEvents": [],
"referencedPubkeys": [],
"scrapedAt": "2026-10-14T12:00:00+00:00"
}

Results are saved in the run's default dataset. Export JSON, CSV, or Excel for analysis, or integrate through the API tab. Read the completed run's defaultDatasetId, then retrieve its rows through the dataset items API. Apify API requests require your Apify credentials.

Pricing

ChargeRate
Actor start$0.005 per memory-based start-event unit: one unit per GB of allocated memory, minimum one unit.
Dataset result$0.001 per saved item, including duplicate items.

The current default is 4 GB (4096 MB), so startup costs 4 × $0.005 = $0.020.

Saved rowsTotal at 4 GB
0$0.020
50$0.070
100$0.120
300$0.320
500$0.520

These examples assume one start, the listed rates and saved-row counts, and no additional charge events. More memory changes the start multiplier; repeated runs incur separate starts. maxItems is not a dollar budget. Check the Pricing tab for current rates and included platform costs.

Coverage and limitations

Relay availability and retained events vary. Results may be partial or empty, and repeated runs may overlap. Search examines a limited feed sample, so it can miss matching posts. The Actor does not deduplicate across relays or select the latest profile version; handle these needs downstream. Profile data may be incomplete or outdated, and signatures are returned without verification.

For help, open an issue with the mode, relay configuration, and run ID. Keep API tokens out of reports.