Cemetery & Death Records Database - Find A Grave Scraper avatar

Cemetery & Death Records Database - Find A Grave Scraper

Pricing

from $2.40 / 1,000 record scrapeds

Go to Apify Store
Cemetery & Death Records Database - Find A Grave Scraper

Cemetery & Death Records Database - Find A Grave Scraper

Scrape memorial and death records from Find A Grave, the largest cemetery directory on the web. Returns birth/death dates and places, cemetery location, plot info, and linked family memorials across 250M+ memorials worldwide.

Pricing

from $2.40 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Cemetery & Death Records Database — Find A Grave Scraper

Scrape memorial and death records from Find A Grave, the largest cemetery directory on the web. Returns birth and death dates, birth and death places, cemetery location, plot info, grave photo status, and linked family memorials for a corpus that spans roughly 250 million memorials across some 600,000 cemeteries worldwide.


Find A Grave Scraper Features

  • Searches by first and/or last name and returns matching memorials directly.
  • Walks the full worldwide cemetery directory — continent, country, state, county, cemetery — when you want the whole corpus instead of one name.
  • Extracts birth and death dates and places, not just years. When the source has a full date, so do you.
  • Captures plot location, grave photo status, and any inscription text left on the memorial page.
  • Returns linked family members — parents, spouse, children, siblings — as structured records with their own memorial IDs, so one search opens onto a family tree instead of a single row.
  • Resumes a stopped crawl from where it left off, at no extra charge for what it already delivered.

Who Uses Find A Grave Data?

  • Skip tracers and collections agencies — confirm someone is deceased before spending further effort on a locate. A death date closes a file.
  • Genealogy researchers — build out a family tree using the linked parent, spouse, and child records instead of chasing each name by hand.
  • Insurance SIU teams — cross-check a claimed death against a public burial record during claims validation.
  • Probate and heir-location firms — use the family links to map who else might have a claim, starting from a single memorial.
  • Funeral homes and memorial services — check whether a family member already has a memorial on record before creating a duplicate.

How Find A Grave Scraper Works

  1. Pick a mode: search by name, or browse the full cemetery directory for everything the source publishes.
  2. The scraper finds matching memorials — either from your name query or by walking down through cemeteries — and opens each one.
  3. Each memorial page is parsed into a full record: dates, places, cemetery, plot, photo status, family links, and any inscription.
  4. Records land in your dataset as they're found. Set maxItems to cap the run, or leave it high and let it run.

Input

{
"searchMode": "name",
"firstName": "John",
"lastName": "Smith",
"maxItems": 100
}
FieldTypeDefaultDescription
searchModestringbrowsebrowse walks the full cemetery directory worldwide (no filter — the entire corpus). name searches by first and/or last name instead.
firstNamestring—First name to search for. Used only when searchMode is name.
lastNamestring—Last name to search for. Used only when searchMode is name.
maxItemsinteger10Maximum number of memorial records to return. Required.
resumeCursorstring—Cursor from a previous run's Output. Continues a stopped crawl instead of starting over.

To browse the whole directory instead of searching a name:

{
"searchMode": "browse",
"maxItems": 5000
}

Find A Grave Scraper Output Fields

{
"memorial_id": 20491559,
"full_name": "John Smith",
"maiden_name": null,
"birth_date": "4 Aug 1823",
"birth_place": "Germany",
"death_date": "6 Oct 1867",
"death_place": "Rome, Jefferson County, Wisconsin, USA",
"age_at_death": 44,
"cemetery_id": 88831,
"cemetery_name": "Riverview Cemetery",
"cemetery_city": "Rome",
"cemetery_county": "Jefferson County",
"cemetery_state": "Wisconsin",
"cemetery_country": "USA",
"plot_info": "W-293",
"has_grave_photo": true,
"family_links": [
{ "relation": "Spouse", "memorial_id": 20491560, "name": "Margaret Landgraf Smith" }
],
"inscription": null,
"memorial_url": "https://www.findagrave.com/memorial/20491559/john-smith",
"scraped_at": "2026-09-28T19:42:41.151Z"
}
FieldTypeDescription
memorial_idintegerFind A Grave memorial ID
full_namestringName on the memorial
maiden_namestringBirth surname, when shown separately from the married/display name
birth_datestringBirth date as recorded — a full date or a bare year, whichever the memorial has
birth_placestringBirth place as recorded
death_datestringDeath date as recorded
death_placestringDeath place as recorded
age_at_deathintegerAge at death in years
cemetery_idintegerFind A Grave cemetery ID
cemetery_namestringCemetery name
cemetery_citystringCemetery city
cemetery_countystringCemetery county
cemetery_statestringCemetery state or province
cemetery_countrystringCemetery country
plot_infostringPlot or section location within the cemetery
has_grave_photobooleanWhether the memorial has a grave photo
family_linksarrayLinked parent, spouse, child, and sibling memorials — each with relation, memorial_id, and name
inscriptionstringBiography or inscription text on the memorial
memorial_urlstringCanonical memorial URL
scraped_atstringTimestamp the record was scraped

Most memorials don't carry every field — a plot location or an inscription depends entirely on what the original contributor entered. The fields that exist, exist because the source has them.


Resuming a large crawl

Every run emits a resumeCursor in its Output. If a large crawl stops before it finishes — because it hit maxItems, your spend cap (maxTotalChargeUsd), or was aborted — start a new run with the same input plus that resumeCursor to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

  • You are not re-charged for records the earlier run already delivered.
  • Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its resumeCursor is no longer valid.
  • resumeCursor is opaque — supply it unmodified.

FAQ

How do I scrape Find A Grave?

Set searchMode to name with a first and/or last name, or set it to browse to walk the full directory without any filter. Either way, set maxItems and run it.

How much does Find A Grave Scraper cost to run?

Find A Grave Scraper uses pay-per-event pricing — you pay per record returned. Everything needed to reach the site is included in the price. A name search that returns a handful of matches costs a few cents; a full directory walk scales with however many records you ask for.

What data can I get from Find A Grave?

Birth and death dates and places, cemetery location down to city and plot, grave photo status, any inscription text, and linked family members with their own memorial IDs. It's a death record and a family tree in one row.

Can I search by name instead of browsing cemeteries?

Yes. Set searchMode to name and provide a first name, a last name, or both. Find A Grave Scraper returns every matching memorial it finds.

Do I need an account or API key for Find A Grave?

No. Find A Grave Scraper needs nothing from you beyond your search terms or a maxItems value.


Need More Features?

Need custom fields, filters, or a different target site? File an issue or get in touch.

Why Use Find A Grave Scraper?

  • The largest cemetery corpus available — roughly 250 million memorials, about two orders of magnitude more than the next-largest genealogy scraper in the category.
  • Family links, not just a name — parents, spouse, children, and siblings come back as structured records with their own memorial IDs, turning a flat death record into a relationship graph.
  • Two ways in — search a name directly, or point it at the full worldwide directory and let it run.