VOOZH about

URL: https://apify.com/substantial_officer/givesendgo-campaign-ranker

โ‡ฑ GiveSendGo Campaign Ranker ยท Apify


Pricing

Pay per event

Go to Apify Store

GiveSendGo Campaign Ranker

Scrapes GiveSendGo campaigns, extracts funding data, and ranks by percentage raised (lowest first) to identify campaigns needing the most support. Handles Cloudflare, unpublished campaigns, and missing data.

Pricing

Pay per event

Rating

0.0

(0)

Developer

๐Ÿ‘ Daniel Goodwyn

Daniel Goodwyn

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

7 months ago

Last modified

Share

An Apify Actor that scrapes GiveSendGo campaign pages, extracts funding data, and ranks campaigns by percentage raised to help identify campaigns that need the most support.

What it does

This Actor takes a list of GiveSendGo campaign URLs, visits each page, extracts the following data:

  • Campaign title
  • Amount raised
  • Goal amount
  • Calculated percentage raised

The Actor sorts all campaigns from lowest percentage raised to highest, making it easy to identify which campaigns need the most help. Campaigns with the lowest percent raised appear first in the output.

Input

The Actor accepts a JSON input with the following structure:

{
"startUrls":[
{"url":"https://givesendgo.com/campaign-name"},
{"url":"https://www.givesendgo.com/another-campaign"}
],
"proxyConfiguration":{
"useApifyProxy":false
}
}

Input Parameters

  • startUrls (required): An array of GiveSendGo campaign URLs to analyze. You can provide URLs as:
    • Simple strings: ["https://givesendgo.com/campaign"]
    • Objects: [{url: "https://givesendgo.com/campaign"}]
  • proxyConfiguration (optional): Proxy settings if GiveSendGo rate-limits your requests. Defaults to no proxy.

Output

The Actor outputs a dataset containing one record per campaign, sorted by percentRaised (ascending - lowest first).

Each record includes:

  • url: The campaign URL
  • campaignTitle: The campaign name/title
  • raisedAmount: Amount raised (numeric, parsed from currency)
  • goalAmount: Goal amount (numeric, parsed from currency)
  • percentRaised: Calculated percentage (raisedAmount / goalAmount * 100), or extracted from progress bar if amounts are missing
  • status: Status of the campaign (see Status Values below)
  • notes: Any warnings or error details

Status Values

  • "OK": Both goal and raised amounts found - normal campaign
  • "Unpublished": Campaign is unpublished (page shows "This campaign is unpublished" message)
  • "Monthly Goal": Campaign has only a monthly goal (no main goal). Percentage extracted from progress bar if available.
  • "Missing Goal": Goal amount not found (but raised amount exists). Percentage may be extracted from progress bar.
  • "Missing Raised": Raised amount not found (but goal amount exists). Percentage may be extracted from progress bar.
  • "Missing Both": Both goal and raised amounts missing, but progress bar exists (percentage extracted from progress bar)
  • "Blocked": Blocked by Cloudflare protection (URLs are automatically retried at the end with fresh IPs)
  • "403": HTTP 403 Forbidden error
  • "404": HTTP 404 Not Found error
  • "Error": Other errors occurred during processing (details in notes)

Example Output

[
{
"url":"https://givesendgo.com/campaign1",
"campaignTitle":"Help Campaign 1",
"raisedAmount":5000,
"goalAmount":50000,
"percentRaised":10.0,
"status":"OK",
"notes":null
},
{
"url":"https://givesendgo.com/campaign2",
"campaignTitle":"Help Campaign 2",
"raisedAmount":25000,
"goalAmount":50000,
"percentRaised":50.0,
"status":"OK",
"notes":null
}
]

How it works

  1. Input Validation: Validates that at least one URL is provided
  2. Crawling: Uses PlaywrightCrawler to visit each campaign page with:
    • Automatic retries (up to 3 retries for failed requests)
    • Cloudflare challenge detection and handling (waits up to 15 seconds for challenge completion)
    • Deferred retry mechanism: URLs blocked by Cloudflare are retried at the end with fresh IPs
    • Session/IP rotation to avoid rate limiting
  3. Data Extraction: Extracts campaign title, raised amount, and goal amount from the page using:
    • DOM-based extraction targeting .donation__details section
    • Multiple selector fallbacks for edge cases
    • Progress bar percentage extraction when amounts are missing
    • Text-based fallback to find donation section by content
  4. Edge Case Handling:
    • Unpublished campaigns (detected and marked)
    • Monthly goal campaigns (marked as "Monthly Goal" status, uses progress bar for percentage)
    • Missing amounts (extracts percentage from progress bar if available)
    • Cloudflare-blocked pages (automatically retried with fresh IPs)
    • HTTP errors (403, 404) are detected and reported
  5. Calculation: Computes the percentage raised for each campaign (or extracts from progress bar)
  6. Sorting: Sorts all campaigns by percentage raised (ascending - lowest first). Null/invalid values appear at the end.
  7. Output: Pushes the sorted results to the Apify dataset

Error Handling & Rate Limiting

The Actor includes robust error handling and rate limiting protection:

  • Automatic Retries: Up to 3 retries for failed requests during initial crawl
  • Cloudflare Handling: Detects Cloudflare challenges and waits for completion (up to 15 seconds). If blocked, URLs are automatically retried at the end with fresh IPs.
  • Deferred Retry: URLs blocked by Cloudflare are collected and retried at the end of the crawl with fresh proxy IPs (forceNewSession enabled)
  • Session/IP Rotation: Each request gets a fresh IP from the proxy pool to avoid rate limiting
  • Unpublished Campaigns: Detected and marked as "Unpublished"
  • Missing Data: Handles campaigns with missing amounts gracefully:
    • Extracts percentage from progress bar when amounts are missing
    • Marks specific missing fields ("Missing Goal", "Missing Raised", "Missing Both", "Monthly Goal")
  • HTTP Errors: Detects and reports 403 and 404 errors with appropriate status
  • Network Errors: Marked as "Error" with details in notes
  • Invalid URLs: Included in output with appropriate error status

Use Cases

  • Donor Research: Identify campaigns that need the most support
  • Campaign Analysis: Compare funding progress across multiple campaigns
  • Priority Ranking: Sort campaigns by funding urgency
  • Data Collection: Gather structured data about GiveSendGo campaigns

Technical Details

  • Language: JavaScript (ES Modules)
  • Framework: Crawlee (PlaywrightCrawler)
  • Platform: Apify
  • Concurrency: 1 concurrent request (sequential processing to avoid rate limiting and ensure reliable Cloudflare challenge handling)
  • Timeouts:
    • Navigation: 60 seconds (increased for slow Cloudflare challenges)
    • Request handler: 120 seconds (allows time for challenge resolution)
    • Cloudflare challenge: 15 seconds
  • Retry Logic:
    • Initial crawl: Up to 3 retries for failed requests
    • Deferred retry: Blocked URLs are retried at the end with fresh IPs (no retries on retry attempts)
  • Session Management: Each request gets a fresh IP from the proxy pool (maxPoolSize: 1)
  • Cloudflare Bypass: Automatic challenge detection and handling with timeout-based fallback

Limitations

  • Requires valid GiveSendGo campaign URLs
  • Campaign pages must be publicly accessible
  • Rate limiting may apply if processing many campaigns without proxy (use proxyConfiguration with useApifyProxy: true for 10+ URLs)
  • Percentage calculation requires either:
    • Both raised and goal amounts, OR
    • A visible progress bar from which percentage can be extracted
  • Some edge cases (e.g., campaigns with only monthly goals) will show "Monthly Goal" status

Development

To run locally:

npminstall
npx apify-cli run
# Or with a specific input file:
npx apify-cli run --input-file input-test.json

To deploy:

$npx apify-cli push

License

This Actor is provided as-is for use on the Apify platform.

You might also like

Indiegogo Campaign Scraper - Crowdfunding Data Extractor

parseforge/indiegogo-scraper

Scrape Indiegogo crowdfunding campaigns with title, funding goal, amount raised, backers, days left, category, and location.

Linkedin Ads Scraper

scraper-engine/linkedin-ads-scraper

LinkedIn Ads Scraper extracts data from LinkedIn ad campaigns, including ad titles, descriptions, impressions, engagement metrics, and company details. Ideal for marketers and analysts to track competitors and optimize campaigns. Get structured JSON or CSV outputs using Apifyโ€™s platform.

๐Ÿ‘ User avatar

Scraper Engine

10

Shopee Campaign Microsite Scraper

xtracto/shopee-campaign

Scrape products from Shopee campaign microsites (/m/{slug}). Discover active campaigns automatically from the homepage, or scrape a specific campaign by slug. Handles both card-grid layouts (full data) and editorial link grids (ID-based with optional detail enrichment).

๐Ÿ‘ User avatar

Farhan Febrian Nauval

2

Indiegogo Scraper

crawlerbros/indiegogo-scraper

Scrape Indiegogo crowdfunding campaigns with funding goal, raised amount, backers, currency, deadline, creator, category, tags, image, and discovery feeds (trending, ending soon, by category, search).

Crowd Supply Scraper

crawlerbros/crowdsupply-scraper

Scrape Crowd Supply (crowdsupply.com) - a crowdfunding platform focused on open-source hardware and electronics. Browse campaigns by category or search by keyword. Extracts project names, creators, funding status, amounts raised, backers, categories, and project URLs.

Patreon Scraper

crawlerbros/patreon-scraper

Scrape Patreon creators (campaigns) with campaign metadata, tier pricing, public posts, and patron counts.

91

Cloudflare Bypass Scraper Pro

xtech/cloudflare-scraper-pro

Cloudflare Scraper Pro: The ultimate solution for scraping Cloudflare-protected websites. Advanced browser automation with intelligent Turnstile & CAPTCHA bypass, automatic Cloudflare challenge resolution, and robust proxy rotation to extract data from the most heavily protected sites.