Minnesota DNR Timber Sales avatar

Minnesota DNR Timber Sales

Pricing

from $5.00 / 1,000 timber sale records

Go to Apify Store
Minnesota DNR Timber Sales

Minnesota DNR Timber Sales

Minnesota state timber auction calendar (date, type, status, location, notice/results link) plus the DNR archive of sealed-bid tabulation records and notice-of-sale PDFs, as clean structured records.

Pricing

from $5.00 / 1,000 timber sale records

Rating

0.0

(0)

Developer

Matthew Curtis

Matthew Curtis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Structured feed of Minnesota state timber auctions from the Minnesota Department of Natural Resources (DNR) Division of Forestry. One run gives you every auction on the public Timber Sales Calendar and, optionally, the Timber Auction Archive: the sealed-bid auction tabulation records (which tracts sold, to whom, at what price) and three years of archived notice-of-sale PDFs.

The DNR sells roughly 800,000 cords of timber a year through about 70 area and regional auctions. Loggers, mills, timber brokers, appraisers and forestry consultants track the calendar to know when notices are posted (about 30 days before each sale), when tracts become visible, and when results are published. This Actor turns the web pages into clean records so you can diff them, feed a spreadsheet, or trigger alerts when a notice goes Final or a sale goes Completed.

What it collects

Calendar records (recordType: "calendar"), one per scheduled auction:

FieldExampleNotes
idcalendar:2026-12-01:tower-area-regularStable across runs
saleDate2026-12-01ISO date
dayOfWeekTue
auctionTypeRegular / IntermediateIntermediate = reserved for purchasers with 30 or fewer employees
statusIn Development / Final / CompletedDNR notice-of-sale status
saleNameTower Area RegularAs printed
areaTower AreaSale name without the type words
saleMethodOral / Sealed Bid
time9:00 AM
locationCook Community CenterOr the bid-award note for sealed bids
detailUrllink or nullNotice-of-sale / results page, present once the status is Final or Completed
sourceUrl, scrapedAt

Document records (recordType: "document"), one per archive PDF, when Include archive documents is on:

FieldExample
iddocument:notice-of-sale:20260910-little-falls-regular
documentTypeSealed Bid Tabulation Record or Notice of Sale
title09/10/2026 Little Falls Regular
documentDate2026-09-10
year2026
saleNameLittle Falls Regular
auctionTypeRegular, Intermediate, Special (decorative materials, salvage, Camp Ripley) or All (one document covering both Regular and Intermediate tracts)
saleMethodOral / Sealed Bid
urlabsolute PDF link on files.dnr.state.mn.us or webapps.dnr.state.mn.us
fileName20260910 Little Falls Regular.pdf

A SUMMARY record in the key-value store reports rows found and kept, the filters applied, failed requests, and links to the DNR Qualified Purchasers List and Notice of Unsold Timber Sales PDFs (updated nightly by DNR).

Input

InputDefaultWhat it does
includeCalendartrueCollect the auction calendar (currently about 70 auctions, roughly 2 months ahead plus the last 30 days).
includeDocumentsfalseAlso collect the Timber Auction Archive documents.
documentTypesbothSealed Bid Tabulation Record and/or Notice of Sale.
documentYears2Keep only documents from the most recent N calendar years; 0 = whole archive (about 850 documents back to 2016).
dateFrom / dateToemptyISO day bounds applied to saleDate and documentDate.
auctionTypesallAny of Regular, Intermediate, Special. Combined (All) documents always pass this filter.
statusesallCalendar statuses to keep, e.g. ["Final", "Completed"] to get only auctions with a posted notice or results.
maxItems200Hard cap on records (calendar first, then documents).

Sample output record

{
"recordType": "calendar",
"id": "calendar:2027-01-05:gna-sealed-bid-regular",
"saleDate": "2027-01-05",
"dayOfWeek": "Tue",
"auctionType": "Regular",
"status": "In Development",
"saleName": "GNA Sealed Bid Regular",
"area": "GNA",
"saleMethod": "Sealed Bid",
"time": "4:30 PM",
"location": "Bid Awarding at the Two Harbors Area Office at 2:00 PM on January 6th",
"detailUrl": null,
"sourceUrl": "https://webapps.dnr.state.mn.us/timber_sales_calendar/",
"scrapedAt": "2026-10-24T18:50:06.105Z"
}

Pricing

Pay per event, using Apify's built-in events:

  • Actor start – $0.02 per run (one event per GB of memory, minimum one). The Actor needs only 256 MB.
  • Timber sale record – $0.005 per record in the dataset (calendar row or archive document).

A default run (calendar only, about 70 records) costs about $0.37 plus Apify platform usage. A full archive pull (includeDocuments: true, documentYears: 0, maxItems: 1000) is about $4.60. There is no charge for records filtered out by your input.

Limitations

  • DNR keeps auction results on the calendar for 30 days after each sale; older oral-auction results are not available online. Sealed-bid results stay in the archive as PDFs.
  • Per-tract details (species, volume, appraised and bid prices, purchaser) live inside the linked notice-of-sale and tabulation PDFs. This Actor gives you the links and metadata; it does not parse the PDFs.
  • The calendar shows about two months of upcoming auctions, so between seasons it can be short. Nothing is fabricated when the page is empty: a missing table fails the run with a clear message so you notice layout changes.
  • Public data only. No login, no CAPTCHA, no personal data: purchaser names appear only inside DNR's own PDFs, which are linked, not scraped.

Get alerted when records change

Pair this Actor with Dataset Diff & Alert Monitor to receive only the new, changed or removed records in Slack, Discord, Telegram or a webhook. Schedule the monitor, not this Actor: it runs this Actor for you, compares runs by id, and a run that finds nothing costs only the comparison. Status changes (a notice posted, results final) arrive as changed rows. The sister Actor for Washington is wa-dnr-timber-sales.

{
"sourceActorId": "mdcurt/mn-dnr-timber-sales",
"sourceInput": {
"includeCalendar": true,
"includeDocuments": false
},
"keyFields": [
"id"
],
"notifyOn": [
"added",
"changed"
],
"labelField": "saleName",
"urlField": "detailUrl",
"slackWebhookUrl": "https://hooks.slack.com/services/…"
}

Changelog

  • 1.0.0 (2026-10-24) – Initial release: calendar + archive index, filters, SUMMARY record, stable ids.