# Weather Forecast API - Spire Point, Airport and Tide Forecasts (`nabeelbaghoor/global-weather-point-forecast-api`) Actor

Global weather forecasts from the Spire Weather API: hourly to 15 day point forecasts by latitude and longitude, optimized forecasts for 10,000+ airports, ports and stations, current weather conditions and tide heights with high and low tides. Temperature, wind, rain, waves. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/global-weather-point-forecast-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Developer tools, Business, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 weather or tide record returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Weather Forecast API - Spire Point, Airport and Tide Forecasts

Pull global weather forecasts for any latitude and longitude, optimized forecasts for more than 10,000 airports, ports and weather stations, current weather conditions and tides from the Spire Weather API with your own key, as clean dataset rows.

Works with the official Spire Weather API on api.wx.spire.com: the Point Forecast API (Spire's satellite-initialised global model SOF-D at 1/8 degree, hourly to 48 hours and 6 hourly to 15 days), the Optimized Point Forecast API, Current Weather Conditions and Tides. Each forecast time step becomes one row with temperature, dew point, humidity, wind, gusts, precipitation, cloud, pressure and visibility as flat columns, plus every variable of the bundles you pick (maritime waves and currents, thunderstorm, agricultural soil, clouds, wind and solar energy, precipitation type). Download as JSON, CSV or Excel, schedule it, or feed it into logistics planning, energy trading, agriculture, shipping, aviation dashboards, Google Sheets and AI agents. Bring your own API key.

BYOK, not live-tested: every endpoint, parameter and value comes from Spire's published documentation on developers.wx.spire.com, and every route was confirmed to exist on api.wx.spire.com, but the actor has not been run against a live Spire subscription.

### What it does

- **Point forecast by coordinates**: the Spire global forecast for each latitude and longitude, one row per lead time. Choose the time bundle (hourly to 48 hours, 3 hourly to 5 days, 6 hourly to 7, 10 or 15 days), the model run, a valid time window and up to 14 data bundles.
- **Optimized forecast for airports, ports and stations**: Spire's machine-learning optimized forecast, refreshed every hour, for ICAO airports (icao:KJFK), WMO stations (wmo:72259) and UN/LOCODE ports (unlocode:NLAMS), with ceiling, fog and thunderstorm probability, precipitation probability, snowfall, ice, heat index, wind chill and degree days, hourly to 15 days.
- **Current weather by coordinates**: the hourly 3 km current conditions analysis: temperature, dew point, humidity, wind and gusts, sea level pressure, precipitation rate and type, visibility, shortwave radiation and cloud amount.
- **Hourly tide height**: astronomical tide height relative to mean sea level at 1/16 degree, from 1990 onwards, past and future in one query, up to 10 days per request.
- **High and low tides**: the time and height of every high and low tide between two dates.
- **Units and time zones**: SI, US (Celsius) or US with Fahrenheit, and times in UTC, any IANA time zone or local time at the point. Every row carries the unit of each field.
- **Pay only for results**: refused and empty lookups are recorded as a free row that says why, never charged.

### How to get an API key

Spire Weather keys are issued by Spire, not self-served. Email the Spire Weather team (weather@spire.com) or use the contact form on spire.com to request a trial (usually one week) or a subscription, naming the products (Standard Point API, Optimized Point API), bundles (for example basic, maritime, agricultural) and forecast range you need. Your key arrives in your welcome email. Paste it into the API key field. It is sent only in the spire-api-key header to api.wx.spire.com and is never logged. A key opens only the products, bundles and time bundles on its plan.

### Input

| Field | Modes | Description |
| --- | --- | --- |
| `mode` | all | `pointForecast`, `optimizedForecast`, `currentWeather`, `tides` or `tideExtrema` |
| `locations` | point, current, tides | One latitude,longitude per line, such as 40.7128,-74.0060 |
| `stations` | optimized | icao:KJFK, wmo:72259, unlocode:NLAMS, a bare ICAO code such as EGLL, or a location UUID |
| `bundles` | point | basic (default), basic-accumulation, maritime, maritime-atmos, maritime-wave, maritime-wave-ext, thunderstorm, agricultural, clouds, wind-energy, solar-energy, solar-energy-accumulation, precipitation, precipitation-accumulation |
| `optimizedBundle` | optimized | basic (default), wind-energy or solar-energy |
| `timeBundle` | point, optimized | hourly (default), 3_hourly, 6_hourly, 6_hourly_extended, 6_hourly_10day, 6_hourly_15day, hourly_6day, or all (optimized only) |
| `issuanceTime` | point, optimized | Model run as ISO 8601, such as 2026-10-16T00:00:00Z. Empty means the latest |
| `validTimeInterval` | point, optimized | ISO 8601 interval, such as 2026-10-16T00:00:00Z/P1D |
| `currentTime` | current | ISO 8601 time or range within the past 72 hours. Empty means the latest |
| `startDate` | tides | ISO 8601 date or date-time |
| `endDate` | high and low tides | ISO 8601 date or date-time. Empty means three days after the start |
| `tideHours` | hourly tides | 1 to 240 hours from the start. Empty means 240 |
| `unitSystem` | all | si, us or us-f. Empty means SI |
| `timezone` | point, optimized, current | IANA name such as Europe/Amsterdam, or local. Empty means UTC |
| `maxResults` | all | Row ceiling for the run (default 100) |
| `requestsPerMinute` | all | Pacing, default 30 |
| `apiKey` | all | Your Spire Weather API key (or the DATA_API_KEY secret) |

Example: a 15 day, 6 hourly forecast with waves for two offshore points.

```json
{
    "mode": "pointForecast",
    "locations": ["26.71,-22.41", "51.98,3.95"],
    "bundles": ["basic", "maritime"],
    "timeBundle": "6_hourly_15day",
    "maxResults": 200
}
```

### Example output

An illustrative point forecast row, shaped like Spire's documented Point API response (values are an example, not real data). Every value Spire returns is kept as its own column and in the values object; only a few are shown.

```json
{
    "mode": "pointForecast",
    "recordType": "forecast",
    "identifier": "40.018672,-105.250537",
    "found": true,
    "latitude": 40.018672,
    "longitude": -105.250537,
    "elevation": 1655.2,
    "locationName": null,
    "issuanceTime": "2026-10-16T00:00:00+00:00",
    "validTime": "2026-10-16T06:00:00+00:00",
    "airTemperature": 287.7,
    "dewPointTemperature": 284.2,
    "relativeHumidity": 79.0,
    "windSpeed": 3.1,
    "windDirection": 193.0,
    "windGust": 6.5,
    "precipitationRate": 0.0,
    "precipitationAmount": 0.0,
    "totalCloudCover": 100.0,
    "seaLevelPressure": 101708.8,
    "visibility": 24135.3,
    "tideEvent": null,
    "tideHeight": null,
    "unitSystem": "si",
    "forecastModel": "Spire SOF-D Forecast",
    "units": { "air_temperature": "degreeK", "wind_speed": "m/s", "precipitation_amount": "mm" },
    "air_temperature": 287.7,
    "eastward_wind": 0.7,
    "northward_wind": 3.0,
    "retrievedAt": "2026-10-16T08:00:00.000Z",
    "note": null
}
```

### FAQ

#### What is the Spire Weather API?

Spire Weather is the weather data business of Spire Global (NYSE: SPIR), which runs its own satellite constellation and feeds radio occultation data into a proprietary global forecast model. The Spire Weather API on api.wx.spire.com serves point, route and file forecasts, an optimized point forecast for fixed locations, current conditions, tides, lightning, storm tracks and historical weather, authenticated with an API key in the spire-api-key header.

#### Do I need my own Spire Weather API key?

Yes. This is a bring-your-own-key actor: it calls Spire with your key, under your Spire contract and its terms. A missing or rejected key, or a bundle or time bundle outside your plan, ends the run cleanly with a status message that explains what to change, and nothing is charged.

#### What is the difference between the point forecast and the optimized forecast?

The point forecast samples Spire's global model (about 14 km) at any coordinate. The optimized forecast blends Spire's model with other global and regional models and local observations through machine learning for one fixed location, refreshed every hour, and is available for more than 10,000 airports, maritime ports and weather stations.

#### How far ahead do the forecasts go?

The global model runs four times a day. The 00 and 12 UTC runs reach 48 hours hourly, 5 days 3 hourly and 15 days 6 hourly; the 06 and 18 UTC runs cover 24 hours. The optimized forecast is hourly to 15 days with the all time bundle. Which ranges you can read depends on your subscription.

#### Why does the latest forecast sometimes have fewer rows?

Spire publishes a run while its later lead times are still being computed. If you need a complete run, set the issuance time to the previous run, or compare the row count with the time bundle (49 rows for hourly on a 00 or 12 UTC run).

#### What units are the values in?

SI by default: Kelvin, metres per second, Pascals, millimetres and metres. Choose us for Celsius, mph and hPa, or us-f for Fahrenheit. The units column of every row lists the unit of each field, straight from the API.

#### What do I pay?

Pay per result: 0.005 USD per row, where a row is one forecast time step, one current weather record, one tide hour or one high or low tide. Refused and empty lookups are never charged. Your Spire subscription is billed separately by Spire. Each location or station is one Spire API request.

### Pricing

| Event | Price | Charged for |
| --- | --- | --- |
| `weather-record` | 0.005 USD | Each forecast time step, current weather record, tide hour or high or low tide |

### Keyword map

weather API, weather forecast API, point forecast API, Spire Weather API, Spire Global weather data, hourly weather forecast, 15 day forecast, airport weather forecast, ICAO weather, port weather, maritime weather, wave forecast, ocean current forecast, wind forecast, solar irradiance forecast, wind energy forecast, agricultural weather, soil moisture forecast, current weather API, tide API, tide times, high and low tide, weather data for AI agents.

### Terms and data use

Spire Weather data is licensed under your Spire Order Form and the Spire Data Service Terms (published with the Spire Weather Data Description and Data Order Form on spire.com/our-data/terms-of-use). The standard licence is non-exclusive and non-transferable, for Internal Use and for Derivative Works for Internal Use during the term, plus any Permitted External Use your Order Form allows. Distributing the data to third parties needs a separate Distribution License, the data must not be used to build a competing service, Spire's notices must be kept, and on termination the data must no longer be used and must be destroyed (copies may remain on archival or backup systems). Run this actor with your own key, keep the results for your own internal use within your licence, and contact Spire before sharing or reselling the data. This actor is not affiliated with or endorsed by Spire Global.

# Actor input Schema

## `mode` (type: `string`):

Point forecast reads the Spire global forecast (SOF-D) for each latitude and longitude, one row per lead time. Optimized forecast reads the machine-learning optimized forecast for airports, ports and weather stations. Current weather reads the hourly current conditions analysis. Hourly tide height and High and low tides read Spire's astronomical tide model.

## `locations` (type: `array`):

Point forecast, Current weather and the tide modes. One point per line as latitude,longitude in decimal degrees, such as 40.7128,-74.0060 for New York. Each point is one API request.

## `stations` (type: `array`):

Optimized forecast only. One location per line: icao:KJFK for an airport, wmo:72259 for a WMO weather station, unlocode:NLAMS for a port, a bare ICAO code such as EGLL, or a location UUID returned by an earlier run.

## `bundles` (type: `array`):

Point forecast only. Which groups of weather variables to return. Your Spire key is licensed for some bundles only; one outside your plan ends the run with the list of allowed bundles.

## `optimizedBundle` (type: `string`):

Optimized forecast only. Wind energy and Solar energy return data only at locations Spire has configured for them.

## `timeBundle` (type: `string`):

Point and Optimized forecast. The lead time step and horizon. Spire recommends always sending one; which ones work depends on your subscription.

## `issuanceTime` (type: `string`):

Point and Optimized forecast. ISO 8601 date-time of the model run, such as 2026-10-16T00:00:00Z. Leave empty for the most recent run. Pick the previous run when you need a run that has finished populating.

## `validTimeInterval` (type: `string`):

Point and Optimized forecast. ISO 8601 interval of forecast times to return, such as 2026-10-16T00:00:00Z/P1D or 2026-10-16T00:00:00Z/2026-10-18T00:00:00Z. Leave empty for the whole time bundle.

## `currentTime` (type: `string`):

Current weather only. ISO 8601 time or range within the past 72 hours, such as 2026-10-16T12:00:00Z. Leave empty for the latest hourly analysis.

## `startDate` (type: `string`):

Tide modes. ISO 8601 date or date-time, such as 2026-10-16 or 2026-10-16T06:00:00. Tides cover 1990 onwards, past and future. Hourly tides default to now; high and low tides default to today.

## `endDate` (type: `string`):

High and low tides only. ISO 8601 date or date-time. Leave empty for three days after the start.

## `tideHours` (type: `integer`):

Hourly tide height only. Hours of tide data from the start, up to 240 (10 days). Leave empty for the provider default of 240.

## `unitSystem` (type: `string`):

Unit system of the returned values. Leave empty for SI. Every response lists its units in the units column. Tides take SI or US only.

## `timezone` (type: `string`):

Forecast and current weather modes. IANA time zone for returned times, such as Europe/Amsterdam, or local for the zone at each point. Leave empty for UTC.

## `maxResults` (type: `integer`):

The most rows this run returns and charges for. Each forecast lead time, tide hour or high or low tide is one row; an hourly 48 hour forecast is 49 rows per point.

## `requestsPerMinute` (type: `integer`):

Pacing. Rate limits depend on your Spire plan; a rate limit answer is waited out and retried.

## `apiKey` (type: `string`):

Your own Spire Weather API key, from your Spire welcome email. Stored as a secret and sent only in the spire-api-key header to api.wx.spire.com; it is never logged. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "pointForecast",
  "locations": [
    "40.7128,-74.0060"
  ],
  "bundles": [
    "basic"
  ],
  "optimizedBundle": "basic",
  "timeBundle": "hourly",
  "maxResults": 100,
  "requestsPerMinute": 30
}
```

# Actor output Schema

## `records` (type: `string`):

One row per forecast time step, current conditions record or tide record.

# 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 = {
    "locations": [
        "40.7128,-74.0060"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/global-weather-point-forecast-api").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 = { "locations": ["40.7128,-74.0060"] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/global-weather-point-forecast-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "40.7128,-74.0060"
  ]
}' |
apify call nabeelbaghoor/global-weather-point-forecast-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/global-weather-point-forecast-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LprTDzYuilAMEhLx6/builds/mKJXUypRjo7XUY2TC/openapi.json
