USNO Astronomical Almanac Scraper avatar

USNO Astronomical Almanac Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
USNO Astronomical Almanac Scraper

USNO Astronomical Almanac Scraper

Pull sun and moon rise, set, and transit times from the US Naval Observatory for any date and place. Returns moon phase, fraction illuminated, nearest phase date, civil twilight, and solar noon by latitude and longitude. Handy for photography planning, sailing, and field research.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

ParseForge Banner

🌅 USNO Astronomical Almanac Scraper

🚀 Pull sun and moon almanac data in seconds. Get rise, set, and transit times, twilight, moon phase, and illumination from the US Naval Observatory for any date and place on Earth.

🕒 Last updated: 2026-06-08 · 📊 Up to 24 fields per record · one record per location per date · global coverage

Turn the US Naval Observatory (USNO) almanac into clean, structured records you can drop into a photography planner, a sailing log, a field-research dataset, or an astronomy app. Give it one or more latitude,longitude points and a date or date range, and it returns the sun and moon events for each day at each place.

Coverage is global. The USNO rise/set/transit service computes events for any coordinate between latitude -90 and 90 and longitude -180 and 180, including polar day and polar night notes when the sun or moon never rises or sets. Times can be returned in UTC or shifted to any time-zone offset, with an optional daylight saving flag.

🎯 Target Audience💡 Primary Use Cases
Photographers and videographersPlan golden hour, blue hour, and moonlit shoots
Sailors, pilots, and surveyorsLook up twilight and solar noon for navigation
Field researchers and ecologistsTie observations to sun and moon timing
Astronomy app and bot developersSeed a rise/set engine without writing one

📋 What the USNO Astronomical Almanac Scraper does

This Actor calls the public USNO rise/set/transit/twilight API and returns one clean record per location per date:

  • Sun events — rise, set, upper transit (solar noon), and the begin/end of civil twilight.
  • Moon events — rise, set, and upper transit.
  • Moon phase — current phase name, fraction illuminated, and the nearest principal phase with its date and time.
  • Context — the day of week, the time-zone offset used, and a daylight saving flag.

Polar conditions (continuous day or night) are passed through as a sunNote or moonNote instead of a time. Every record carries a scrapedAt timestamp.

🎬 Full Demo (🚧 Coming soon)

⚙️ Input

FieldTypeDescription
locationsarrayOne or more latitude,longitude pairs. Latitude -90 to 90, longitude -180 to 180. Defaults to 38.9,-77.0 (Washington DC).
startDatestringFirst date to fetch, in YYYY-MM-DD. Defaults to today.
endDatestringLast date to fetch, in YYYY-MM-DD. Leave empty to fetch only the start date. A record is produced for every day in the range.
tzintegerHours offset from UTC for the returned times, -12 to 14. Use 0 for UTC, -5 for US Eastern Standard Time. Defaults to 0.
dstbooleanWhen on, times are shifted one hour forward for daylight saving and flagged in the output. Defaults to false.
maxItemsintegerHow many records to return. Free plan is capped at 10.

Example 1 — one week of almanac data for Washington DC

{
"locations": ["38.9,-77.0"],
"startDate": "2026-06-08",
"endDate": "2026-06-14",
"tz": -5,
"maxItems": 7
}

Example 2 — a single date for several cities in UTC

{
"locations": ["51.5,-0.13", "35.68,139.69", "-33.87,151.21"],
"startDate": "2026-06-08",
"tz": 0,
"maxItems": 10
}

⚠️ Good to Know: the number of records is locations × dates. Three locations across a 10-day range is 30 records. At high latitudes near the solstices, the sun or moon may never rise or set; in that case the time fields are null and the reason appears in sunNote or moonNote.

📊 Output

Each almanac record looks like this:

FieldDescription
📅 dateObservation date (YYYY-MM-DD)
🧭 latitudeLatitude used for the query
🧭 longitudeLongitude used for the query
🗓 dayOfWeekDay of the week for the date
timeZoneOffsetUTC offset applied to the times
🌗 isDaylightSavingWhether a DST shift was applied
🌙 currentMoonPhaseCurrent moon phase name
💡 fractionIlluminatedFraction of the moon illuminated
🌑 nearestPhaseNameNearest principal phase (New, First Quarter, etc.)
📆 nearestPhaseDateDate of that nearest phase
🕐 nearestPhaseTimeTime of that nearest phase
🌅 sunRiseSunrise time
🌇 sunSetSunset time
sunTransitSolar noon (upper transit)
🌄 beginCivilTwilightStart of civil twilight
🌆 endCivilTwilightEnd of civil twilight
📝 sunNotePolar day/night note for the sun, if any
🌘 moonRiseMoonrise time
🌒 moonSetMoonset time
🌕 moonTransitMoon upper transit
📝 moonNotePolar note for the moon, if any
🔢 apiVersionUSNO API version that served the data
🕒 scrapedAtCollection timestamp
errorNull on success

Real sample — almanac record

{
"date": "2026-06-08",
"latitude": 38.9,
"longitude": -77.0,
"dayOfWeek": "Monday",
"timeZoneOffset": -5,
"isDaylightSaving": false,
"currentMoonPhase": "Waning Gibbous",
"fractionIlluminated": "0.83",
"nearestPhaseName": "Last Quarter",
"nearestPhaseDate": "2026-06-09",
"nearestPhaseTime": "14:43",
"sunRise": "04:43",
"sunSet": "19:32",
"sunTransit": "12:07",
"beginCivilTwilight": "04:11",
"endCivilTwilight": "20:04",
"sunNote": null,
"moonRise": "23:51",
"moonSet": "09:42",
"moonTransit": "04:33",
"moonNote": null,
"apiVersion": "3.0.1",
"scrapedAt": "2026-06-08T17:09:21.000Z",
"error": null
}

✨ Why choose this Actor

  • One clean record per location per date, ready for a spreadsheet or database.
  • Handles single dates or long date ranges in one run.
  • Returns times in UTC or any time-zone offset, with an optional DST shift.
  • Passes through polar day and polar night notes instead of dropping them.
  • No account, no API key, and no login required.

📈 How it compares to alternatives

ApproachEffortStructured fieldsDate rangesMaintenance
This ActorOne runYesYesNone on your side
Copying from an almanac siteHoursInconsistentManualConstant
Writing your own astronomy codeDaysDependsYou build itYou own the upkeep

🚀 How to use

  1. Create a free Apify account using this sign-up link.
  2. Open the USNO Astronomical Almanac Scraper.
  3. Enter one or more locations as latitude,longitude.
  4. Set a startDate (and optional endDate), tz, and maxItems.
  5. Click Start and grab your results when the run finishes.

💼 Business use cases

Photography and film

GoalHow this helps
Plan golden and blue hourUse sunrise, sunset, and civil twilight times
Schedule moonlit scenesUse moonrise, moonset, phase, and illumination

Marine and aviation

GoalHow this helps
Prep navigation logsPull twilight and solar noon by coordinate
Brief crews on daylightSnapshot sun and moon timing for a route

Field research

GoalHow this helps
Align observations to lightTag samples with sun and moon timing
Build long time seriesSweep a date range for one site

Apps and automation

GoalHow this helps
Power a rise/set featureFeed clean almanac records to your app
Run a daily snapshotSchedule one location per day

🔌 Automating USNO Astronomical Almanac Scraper

Connect runs to the tools you already use:

  • Make and Zapier to trigger runs and route records into sheets or databases.
  • Slack to post the day's sun and moon times to a channel.
  • Airbyte to load results into a warehouse.
  • GitHub Actions to schedule periodic snapshots.
  • Google Drive to archive each run's output.

🌟 Beyond business use cases

  • Research: build multi-year almanac datasets for a study site.
  • Personal: plan a stargazing night or a sunrise hike.
  • Non-profit: power a community observatory's event calendar.
  • Experimentation: prototype an astronomy app without writing the math.

🤖 Ask an AI assistant

Paste your results into ChatGPT, Claude, Perplexity, or Microsoft Copilot and ask it to find the best shooting window, chart daylight length over a month, or compare twilight across cities.

❓ Frequently Asked Questions

Do I need a USNO account or API key? No. The Actor reads the public US Naval Observatory rise/set/transit API, which needs no login.

What locations are supported? Any coordinate on Earth, latitude -90 to 90 and longitude -180 to 180. Pass them as latitude,longitude strings.

Can I fetch a date range? Yes. Set startDate and endDate. One record is produced for every day in the range, for every location.

What time zone are the times in? Whatever you set with tz (hours from UTC). Use 0 for UTC. Turn on dst to shift one hour forward for daylight saving.

What happens at high latitudes? When the sun or moon never rises or sets, the time fields are null and the reason is reported in sunNote or moonNote.

What is "solar noon"? The sun's upper transit, returned in sunTransit. It is the moment the sun is highest in the sky.

Does it include moon phase? Yes. Every record carries the current phase, the fraction illuminated, and the nearest principal phase with its date and time.

How fresh is the data? Each run computes live from USNO, so it reflects the official almanac at run time.

How many records will I get? Locations × dates, capped by maxItems. Free runs are limited to 10.

Can I schedule this? Yes. Use Apify Schedules to snapshot any location on any cadence.

🔌 Integrate with any app

Results are available through the Apify API, so you can pull them into any app, database, or workflow you already run.

💡 Pro Tip: browse the complete ParseForge collection.

🆘 Need Help? Open our contact form

⚠️ Disclaimer: independent tool, not affiliated with the US Naval Observatory or the US Navy. Only publicly available data is collected.