# Cemetery Records Scraper (`parseforge/cemetery-records-scraper`) Actor

Scrape cemetery and burial records from Find A Grave. Search by name, country, state, or county. Extract cemetery details, GPS coordinates, memorial counts, and 16+ fields per record. Export as JSON, CSV, or Excel for genealogical research.

- **URL**: https://apify.com/parseforge/cemetery-records-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, Lead generation, Developer tools
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## 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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)

## 🪦 Cemetery Records Scraper

> **The Find A Grave Scraper that extracts cemetery and burial records, with 16+ fields per cemetery, plus geographic coordinates for mapping.**

Search for cemeteries by name, country, state, county, or postal code. Extract structured data including cemetery details, memorial counts, GPS coordinates, and more — ready for genealogical research, analysis, or integration into your platform.

### ✨ What Does It Do

- **Cemetery Search** — Find cemeteries by name across the Find A Grave database with flexible location filtering
- **Location Details** — Capture city, county, state, and country for every cemetery in the results
- **Geographic Coordinates** — Extract latitude and longitude with precision indicators for interactive map plotting
- **Memorial Statistics** — Collect total memorial counts, photographed memorials, photo requests, and GPS-tagged records
- **Direct Cemetery Lookup** — Provide a specific Find A Grave cemetery URL to fetch detailed data for a single cemetery
- **Batch Processing** — Collect up to 100 cemeteries per run (free users) or scale to 1 million (paid users)

### 🔧 Input

The scraper accepts either a direct Find A Grave URL or search filters. Choose one approach:

**Option 1: Direct URL**
Provide a Find A Grave cemetery page URL (e.g., `https://www.findagrave.com/cemetery/614291`). Search filters are ignored when a URL is provided.

**Option 2: Search Filters**
Combine cemetery name search with location filters to discover cemeteries across any region.

```json
{
  "searchQuery": "Arlington",
  "countryId": "4",
  "maxItems": 50
}
````

| Field | Type | Description |
|-------|------|-------------|
| `startUrl` | string | Direct Find A Grave URL to scrape |
| `searchQuery` | string | Cemetery name to search for |
| `countryId` | string | Country code (`4` = USA, `10` = UK, `11` = Canada) |
| `stateId` | string | State ID (`0` = all states) |
| `county` | string | Filter by county name |
| `postCode` | string | Filter by ZIP or postal code |
| `maxItems` | integer | Max cemeteries to collect (free: 100, paid: 1,000,000) |
| `maxConcurrency` | integer | Parallel requests (default: 5, max: 10) |
| `proxyConfiguration` | object | Proxy settings for reliable access |

### 📊 Output

Each cemetery record contains structured data in JSON format, exportable as JSON, CSV, or Excel:

```json
{
  "url": "https://www.findagrave.com/cemetery/614291",
  "cemeteryName": "Arlington National Cemetery",
  "cemeteryId": "614291",
  "city": "Arlington",
  "county": "Arlington County",
  "state": "Virginia",
  "country": "United States",
  "latitude": 38.876,
  "longitude": -77.066,
  "memorialCount": 95847,
  "photographedCount": 87234,
  "photoRequestCount": 1205,
  "gpsCount": 43021,
  "coordinatePrecision": "Exact",
  "position": 1,
  "scrapedAt": "2026-03-17T12:00:00.000Z"
}
```

| Field | Description |
|-------|-------------|
| `url` | Direct link to the cemetery page on Find A Grave |
| `cemeteryName` | Official name of the cemetery |
| `cemeteryId` | Unique cemetery identifier |
| `city` | City where the cemetery is located |
| `county` | County or district |
| `state` | State or province |
| `country` | Country name |
| `latitude` | GPS latitude coordinate |
| `longitude` | GPS longitude coordinate |
| `memorialCount` | Total number of memorials in the cemetery |
| `photographedCount` | Number of memorials with photos |
| `photoRequestCount` | Number of pending photo requests |
| `gpsCount` | Number of GPS-tagged memorials |
| `coordinatePrecision` | Precision level of the coordinates |
| `position` | Result position in the search |
| `scrapedAt` | Timestamp of data collection |

### 💎 Why Choose This Scraper

- **Complete Cemetery Data** — Extracts 16+ fields per cemetery, from basic details to GPS coordinates and memorial statistics
- **Fast HTTP Collection** — No browser required, delivering results in seconds rather than minutes
- **Flexible Search** — Search by name, location filters, or direct URL to accommodate any research approach
- **No Technical Skills Required** — Enter a cemetery name or URL and download results
- **Smart Region Scanning** — Automatically divides large geographic areas into tiles for thorough coverage
- **Multiple Export Formats** — Save data as JSON, CSV, or Excel for use in genealogy software, spreadsheets, or databases

### 📋 How to Use

1. [Create a free Apify account](https://console.apify.com/sign-up?fpr=vmoqkp) with $5 credit
2. Search for **Cemetery Records Scraper** in the Apify Store
3. Enter a cemetery name (e.g., "Arlington") and select a country, or paste a Find A Grave URL
4. Set `maxItems` to control how many results you want
5. Click **Start** and wait for results
6. Download data as JSON, CSV, or Excel

### 🎯 Business Use Cases

**Genealogists and Family Historians**
Build comprehensive family tree research by locating ancestor burial sites. Verify burial locations and create personal cemetery maps showing family burial patterns across regions.

**Academic Researchers and Historians**
Compile cemetery databases for historical analysis and demographic research. Study burial patterns and cemetery development across time periods and regions.

**Genealogy Software Companies**
Integrate cemetery data into genealogy applications and family tree platforms. Enrich existing records with cemetery location and memorial information.

**Cemetery Management Organizations**
Maintain updated cemetery directories and publicly accessible databases. Track cemetery growth through memorial count analysis and support preservation efforts.

### ❓ FAQ

**How accurate is the cemetery data?**
Data is extracted directly from Find A Grave, so accuracy matches what's published on the site. Cemetery information is maintained by community contributors and cemetery operators.

**Can I search for cemeteries in multiple countries?**
Yes. Use the `countryId` parameter to specify countries (USA = 4, UK = 10, Canada = 11). Run separate jobs for multi-country searches.

**What does coordinatePrecision mean?**
This indicates how accurately the cemetery's GPS coordinates have been mapped on Find A Grave. Values like "Exact" mean the location has been precisely verified.

**What if my search returns no results?**
Check that the cemetery name is spelled correctly and you've selected the right country. The cemetery may not exist in the Find A Grave database — try broader search terms or the county name.

**Is there a limit to how many cemeteries I can scrape?**
Free users: 100 per run. Paid users: up to 1 million per run. Run multiple jobs for larger collections.

### 🔗 Integrate This Scraper With Any App

- [Make](https://docs.apify.com/platform/integrations/make) — Automate workflows
- [Zapier](https://docs.apify.com/platform/integrations/zapier) — Connect 5000+ apps
- [GitHub](https://docs.apify.com/platform/integrations/github) — Version control integration
- [Slack](https://docs.apify.com/platform/integrations/slack) — Get notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte) — Data pipelines
- [Google Drive](https://docs.apify.com/platform/integrations/drive) — Export to spreadsheets

### 💡 More ParseForge Actors

| Actor | Description | Link |
|-------|-------------|------|
| Greatschools Scraper | School ratings and reviews | [View](https://apify.com/parseforge/greatschools-scraper) |
| Copart Scraper | Vehicle auctions | [View](https://apify.com/parseforge/copart-public-search-scraper) |
| AllTrails Scraper | Trail and hiking data | [View](https://apify.com/parseforge/alltrails-scraper) |

### 🚀 Ready to Start?

[Try it free](https://console.apify.com/sign-up?fpr=vmoqkp) — no credit card required. Get $5 in free credits and start extracting cemetery records in minutes.

### 🆘 Need Help?

Have questions, need a custom scraper, or want to report an issue? [Contact us here](https://tally.so/r/BzdKgA).

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Find A Grave or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

# Actor input Schema

## `startUrl` (type: `string`):

Direct FindAGrave.com cemetery search or detail URL. If provided, search filters below are ignored.

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

Free users: Limited to 100. Paid users: Optional, max 1,000,000

## `searchQuery` (type: `string`):

Cemetery name to search for (e.g. 'Arlington', 'Greenwood', 'Holy Cross'). Results are filtered by name after fetching.

## `countryId` (type: `string`):

FindAGrave country ID (e.g. '4' for USA, '10' for UK, '11' for Canada).

## `stateId` (type: `string`):

FindAGrave state/province ID. Use '0' for all states.

## `county` (type: `string`):

County name to filter results.

## `postCode` (type: `string`):

ZIP or postal code to filter results.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests.

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

Proxy settings for reliable data collection

## Actor input object example

```json
{
  "maxItems": 10,
  "searchQuery": "Arlington",
  "countryId": "4",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Overview of cemetery records with key fields

## `fullData` (type: `string`):

Complete dataset with all cemetery fields

# 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 = {
    "maxItems": 10,
    "searchQuery": "Arlington",
    "countryId": "4",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/cemetery-records-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 = {
    "maxItems": 10,
    "searchQuery": "Arlington",
    "countryId": "4",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/cemetery-records-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 '{
  "maxItems": 10,
  "searchQuery": "Arlington",
  "countryId": "4",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parseforge/cemetery-records-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/cemetery-records-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cemetery Records Scraper",
        "description": "Scrape cemetery and burial records from Find A Grave. Search by name, country, state, or county. Extract cemetery details, GPS coordinates, memorial counts, and 16+ fields per record. Export as JSON, CSV, or Excel for genealogical research.",
        "version": "1.0",
        "x-build-id": "ilUlTjqOK5Eqp39vi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~cemetery-records-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-cemetery-records-scraper",
                "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/parseforge~cemetery-records-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-cemetery-records-scraper",
                "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/parseforge~cemetery-records-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-cemetery-records-scraper",
                "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": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Direct FindAGrave.com cemetery search or detail URL. If provided, search filters below are ignored."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 100. Paid users: Optional, max 1,000,000"
                    },
                    "searchQuery": {
                        "title": "Cemetery Name Search",
                        "type": "string",
                        "description": "Cemetery name to search for (e.g. 'Arlington', 'Greenwood', 'Holy Cross'). Results are filtered by name after fetching."
                    },
                    "countryId": {
                        "title": "Country ID",
                        "type": "string",
                        "description": "FindAGrave country ID (e.g. '4' for USA, '10' for UK, '11' for Canada)."
                    },
                    "stateId": {
                        "title": "State ID",
                        "type": "string",
                        "description": "FindAGrave state/province ID. Use '0' for all states."
                    },
                    "county": {
                        "title": "County",
                        "type": "string",
                        "description": "County name to filter results."
                    },
                    "postCode": {
                        "title": "Post/ZIP Code",
                        "type": "string",
                        "description": "ZIP or postal code to filter results."
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of parallel requests.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for reliable data collection"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
