# Giva Sverige Campaigns & Member Pages Scraper (`automation-lab/giva-sverige-campaigns-member-pages-scraper`) Actor

Extract public Giva Sverige member profiles, nonprofit categories, fundraising totals, campaign page metadata, contact links, and creative assets.

- **URL**: https://apify.com/automation-lab/giva-sverige-campaigns-member-pages-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Giva Sverige Campaigns & Member Pages Scraper

Extract structured data from public Giva Sverige member profiles, campaign-style pages, nonprofit categories, fundraising totals, public links, and image assets.

### What does Giva Sverige Campaigns & Member Pages Scraper do?

This actor turns the public Giva Sverige website into a clean dataset for nonprofit market research.

It starts from the member archive at `https://www.givasverige.se/medlemmar/` by default.

It can also accept specific member profile URLs or public campaign/article URLs.

The scraper uses HTTP requests and Cheerio parsing, so it is fast and lightweight.

It does not require a login.

It does not use a private API.

It does not scrape private donor data.

### Who is it for?

#### Fundraising agencies

Use the dataset to benchmark Swedish charity positioning, issue categories, campaign language, and public fundraising totals.

#### NGO communications teams

Compare how peer organizations describe programs, audiences, social impact, and giving appeals.

#### Partnership researchers

Build a prospect list of Swedish nonprofit organizations by category, cause area, and public profile URL.

#### Market analysts

Monitor the Giva Sverige member landscape and discover organizations active in humanitarian aid, children, healthcare, research, environment, advocacy, and social work.

### Why use this scraper?

- ✅ Export public Giva Sverige member pages into rows
- ✅ Capture organization descriptions and categories
- ✅ Extract collected funds values when Giva Sverige lists them
- ✅ Save logo and image asset URLs for creative research
- ✅ Include canonical URLs and page titles for traceability
- ✅ Optionally include public campaign/article pages linked from start pages
- ✅ Control run size with `maxPages` and `maxItems`

### Data extracted

| Field | Description |
| --- | --- |
| `recordType` | `member`, `campaign_page`, or `source_page` |
| `name` | Organization or public page name |
| `url` | Extracted member/profile/page URL |
| `sourceUrl` | URL where the record was found |
| `pageTitle` | HTML page title |
| `description` | Public profile or page description |
| `categories` | Giva Sverige categories/tags |
| `collectedFundsYear` | Year attached to fundraising total |
| `collectedFundsSek` | Fundraising total in SEK |
| `contactLinks` | External, mailto, and phone links |
| `assetUrls` | Logo, OpenGraph, and in-page image URLs |
| `canonicalUrl` | Canonical URL from the page |
| `scrapedAt` | ISO timestamp |

### How much does it cost to scrape Giva Sverige member pages?

The actor uses pay-per-event pricing.

There is a small start charge per run.

There is also a per-record charge for every dataset item saved.

For most member-directory jobs, cost scales with the number of profiles you export.

Keep the default prefill small for test runs.

Increase `maxItems` when you are ready for a full member export.

### Input options

#### `startUrls`

Optional list of archive, member, or public page URLs.

If omitted, the actor starts from `https://www.givasverige.se/medlemmar/`.

#### `maxPages`

Maximum number of pages fetched.

This includes the archive, detail pages, and optional campaign/article pages.

#### `maxItems`

Maximum number of dataset records saved.

Use this to cap cost and output size.

#### `includeMemberDetails`

When enabled, the actor opens member detail pages for full names, full descriptions, categories, assets, and fundraising totals.

Disable this when you only need fast archive-card extraction.

#### `includeCampaignPages`

When enabled, the actor can also extract non-member public pages discovered from start pages.

Keep this disabled for member-only exports.

#### `includeAssets`

When enabled, the actor saves public logo, OpenGraph, and in-page image URLs.

Disable this if you only need text fields.

### Example input

```json
{
  "startUrls": [
    { "url": "https://www.givasverige.se/medlemmar/" }
  ],
  "maxPages": 120,
  "maxItems": 120,
  "includeMemberDetails": true,
  "includeCampaignPages": false,
  "includeAssets": true
}
```

### Example output

```json
{
  "recordType": "member",
  "name": "Talita",
  "url": "https://www.givasverige.se/medlemmar/talita/",
  "sourceUrl": "https://www.givasverige.se/medlemmar/talita/",
  "pageTitle": "Talita - Giva Sverige",
  "description": "Talita är en ideell organisation...",
  "categories": ["Barn och Unga", "Humanitärt", "Socialt arbete"],
  "collectedFundsYear": 2024,
  "collectedFundsSek": 6074922,
  "contactLinks": [],
  "assetUrls": ["https://www.givasverige.se/wp-content/uploads/.../talita.png"],
  "canonicalUrl": "https://www.givasverige.se/medlemmar/talita/",
  "scrapedAt": "2026-07-09T00:00:00.000Z"
}
```

### How to scrape Giva Sverige member profiles

1. Open the actor on Apify.

2. Keep the default `startUrls` value for the member archive.

3. Set `maxPages` and `maxItems` to the number of records you need.

4. Leave `includeMemberDetails` enabled for richer output.

5. Run the actor.

6. Download results as JSON, CSV, Excel, or through the API.

### Tips for better results

- Use `maxItems: 20` for a quick sample.
- Use `maxItems: 100` or more for a realistic member export.
- Keep `includeCampaignPages` disabled unless you specifically need public page metadata.
- Keep `includeAssets` enabled when you need logo and creative benchmarking.
- Use exact member URLs when researching a small set of organizations.

### Integrations

#### CRM enrichment

Export member names, categories, and URLs into a CRM or spreadsheet for partnership development.

#### Fundraising research

Compare public fundraising totals and profile descriptions across organizations.

#### Content benchmarking

Use descriptions and assets to review nonprofit messaging patterns.

#### Monitoring workflow

Schedule regular runs and compare new exports against previous datasets.

### API usage with Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/giva-sverige-campaigns-member-pages-scraper').call({
  startUrls: [{ url: 'https://www.givasverige.se/medlemmar/' }],
  maxPages: 120,
  maxItems: 120,
  includeMemberDetails: true,
  includeAssets: true
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/giva-sverige-campaigns-member-pages-scraper').call(run_input={
    'startUrls': [{'url': 'https://www.givasverige.se/medlemmar/'}],
    'maxPages': 120,
    'maxItems': 120,
    'includeMemberDetails': True,
    'includeAssets': True,
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~giva-sverige-campaigns-member-pages-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://www.givasverige.se/medlemmar/"}],"maxPages":120,"maxItems":120,"includeMemberDetails":true}'
```

### MCP usage

Use the Apify MCP server to call this scraper from Claude Desktop, Claude Code, or other MCP-compatible tools.

MCP URL:

```text
https://mcp.apify.com/?tools=automation-lab/giva-sverige-campaigns-member-pages-scraper
```

Claude Code setup:

```bash
claude mcp add apify-giva-sverige "https://mcp.apify.com/?tools=automation-lab/giva-sverige-campaigns-member-pages-scraper"
```

Claude Desktop JSON config:

```json
{
  "mcpServers": {
    "apify-giva-sverige": {
      "url": "https://mcp.apify.com/?tools=automation-lab/giva-sverige-campaigns-member-pages-scraper"
    }
  }
}
```

Example prompts:

- "Run the Giva Sverige scraper for the member archive and return the top organizations by collected funds."
- "Extract public Giva Sverige member profiles in the humanitarian category."
- "Create a spreadsheet of member names, URLs, descriptions, categories, and logo URLs."

### Legality

### Legal and ethical use

This actor extracts public information from public Giva Sverige pages.

Do not use the output for spam, harassment, or unlawful profiling.

Respect the source website's terms and use reasonable run limits.

The actor does not collect private donor data, private accounts, or hidden API data.

### FAQ

#### Does this scraper require a Giva Sverige login?

No. It only extracts public pages returned in the website HTML.

#### Can I export logos and campaign images?

Yes. Keep `includeAssets` enabled to save public image URLs.

### Troubleshooting

#### I got fewer records than expected

Increase `maxPages` and `maxItems`.

If `includeMemberDetails` is enabled, each member detail page counts toward `maxPages`.

#### I only need archive cards

Set `includeMemberDetails` to `false`.

This saves records directly from the archive cards and uses fewer page fetches.

#### I need campaign pages too

Enable `includeCampaignPages`, raise `maxPages`, and use specific campaign or article start URLs when possible.

### Related scrapers

Explore other Automation Lab actors for public website, organization, lead, and market-research scraping workflows:

- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/google-maps-lead-finder
- https://apify.com/automation-lab/linkedin-company-scraper

### Changelog

#### 0.1

Initial private build for public Giva Sverige member and campaign/page extraction.

### Support

If the source website changes or you need an additional field, open an issue on the actor page.

### Dataset export formats

Download results as JSON, JSONL, CSV, Excel, XML, or RSS from Apify datasets.

### Scheduling

Use Apify schedules to run this actor weekly or monthly and monitor public member-list changes.

### Performance notes

The actor is HTTP-first and normally runs with 256 MB memory.

It uses polite sequential fetching to avoid unnecessary load.

### Source transparency

Every row includes `url`, `sourceUrl`, `canonicalUrl`, and `scrapedAt` for traceability.

### Limitations

The scraper can only extract information visible in the public HTML returned by Giva Sverige.

It cannot infer private contacts, unpublished campaigns, or hidden fundraising metrics.

# Actor input Schema

## `startUrls` (type: `array`):

Giva Sverige archive, member detail, or public campaign/article URLs to crawl. Defaults to the member archive.

## `maxPages` (type: `integer`):

Upper limit for archive, member detail, and optional campaign/article pages fetched during the run.

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

Maximum dataset rows to emit. Use at least 100 for a realistic member-directory export.

## `includeMemberDetails` (type: `boolean`):

Open each member profile to extract the full organization name, full description, categories, logos, and fundraising totals.

## `includeCampaignPages` (type: `boolean`):

Also crawl public non-member pages linked from start pages to capture campaign/listing metadata and images. Keep disabled for member-only runs.

## `includeAssets` (type: `boolean`):

Save public logo, OpenGraph, and in-page image URLs for creative benchmarking.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.givasverige.se/medlemmar/"
    }
  ],
  "maxPages": 20,
  "maxItems": 20,
  "includeMemberDetails": true,
  "includeCampaignPages": false,
  "includeAssets": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.givasverige.se/medlemmar/"
        }
    ],
    "maxPages": 20,
    "maxItems": 20,
    "includeMemberDetails": true,
    "includeCampaignPages": false,
    "includeAssets": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/giva-sverige-campaigns-member-pages-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 = {
    "startUrls": [{ "url": "https://www.givasverige.se/medlemmar/" }],
    "maxPages": 20,
    "maxItems": 20,
    "includeMemberDetails": True,
    "includeCampaignPages": False,
    "includeAssets": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/giva-sverige-campaigns-member-pages-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.givasverige.se/medlemmar/"
    }
  ],
  "maxPages": 20,
  "maxItems": 20,
  "includeMemberDetails": true,
  "includeCampaignPages": false,
  "includeAssets": true
}' |
apify call automation-lab/giva-sverige-campaigns-member-pages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/giva-sverige-campaigns-member-pages-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/slE6UfqcZjYFNJrvN/builds/BF8PgTKvOojDxnWLp/openapi.json
