# Open-Meteo Weather Scraper — Forecast, Historical & Geocoding (`logiover/open-meteo-weather-scraper`) Actor

Scrape Open-Meteo by city name or lat/lon. Extract hourly temperature, precipitation, wind speed, humidity, and weather code for forecast (16 days) or historical date ranges. No API key, no login.

- **URL**: https://apify.com/logiover/open-meteo-weather-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

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

## Open-Meteo Weather Scraper — Forecast, Historical & Geocoding API

Extract real-time weather forecasts, historical climate records, and city coordinates from Open-Meteo's free, keyless API at scale — no API key, no login, no rate-limit hassle.

### What does Open-Meteo Weather Scraper do?

Open-Meteo Weather Scraper connects to three Open-Meteo endpoints: the **forecast API** (`api.open-meteo.com/v1/forecast`), the **historical archive** (`archive-api.open-meteo.com/v1/archive`), and the **geocoding service** (`geocoding-api.open-meteo.com/v1/search`). You supply a list of city names or latitude/longitude pairs; the actor automatically resolves city names to coordinates, then fetches hourly or daily weather data and flattens the time-series arrays into individual dataset rows.

In forecast mode, each location yields up to 16 days × 24 hours = **384 hourly rows**, covering temperature at 2 m, precipitation, wind speed at 10 m, relative humidity, and WMO weather codes with human-readable descriptions. In historical mode, the same variables are available for any date range back to 1940 for most locations — a 30-day historical pull for 10 cities generates **7,200 rows** in a single run. Geocoding mode resolves city names to coordinates, returning up to 10 candidate cities per query with population and administrative region data.

The actor is fully keyless: Open-Meteo is a free, open-source weather API with no registration required. It is trusted by major weather apps and serves over one billion API calls per day from its own infrastructure.

### Who is it for?

- **Data scientists and analysts** who need structured weather data for climate analysis, ML feature engineering, or correlation studies without signing up for expensive API plans.
- **Business intelligence teams** building dashboards that show weather-correlated KPIs (retail, energy, logistics, agriculture).
- **Developers** who need a reliable, no-auth weather feed for their applications, prototypes, or data pipelines.
- **Researchers** studying historical climate patterns, seasonal trends, or extreme weather events across multiple cities.
- **Operations and supply-chain managers** who want 16-day forecasts for their delivery routes, construction sites, or outdoor event venues.

### Use cases

- **Retail demand forecasting**: pull 16-day hourly forecasts for store locations to predict how weather drives foot traffic and product mix.
- **Energy consumption modeling**: extract temperature and humidity time series for a portfolio of buildings to train HVAC load models.
- **Historical climate studies**: download decades of daily max/min temperatures for hundreds of cities for academic or journalistic climate research.
- **Logistics route weather**: get hourly wind speed and precipitation for waypoints along a transport corridor to flag weather risk windows.
- **Event planning**: check 16-day forecasts for multiple candidate venues and export to Google Sheets for side-by-side comparison.

### Why use Open-Meteo Weather Scraper?

- **Completely keyless**: no API key, no registration, no OAuth — just run it.
- **16 fields per row**: location, lat, lon, country, timezone, time, temperature, max temp, min temp, precipitation, wind speed, humidity, WMO weather code, weather description, and more.
- **Bulk multi-location**: feed a list of hundreds of cities in one run; the actor resolves, fetches, and flattens all of them automatically.
- **Three modes in one**: forecast (up to 16 days), historical (back to 1940), and geocoding — no separate actors needed.
- **Export-ready**: dataset downloads as CSV, JSON, or Excel from Apify; plug directly into Google Sheets, Zapier, or Make workflows.
- **Pay-per-result pricing**: you only pay for what you extract — a 1,000-row forecast run costs fractions of a cent.

### What data can you extract?

Every row in the dataset represents one time point (hourly or daily) for one location, or one geocoding result.

| Field | Type | Description |
|---|---|---|
| `location` | string | Input location name (as you provided it) |
| `latitude` | number | Geographic latitude |
| `longitude` | number | Geographic longitude |
| `country` | string | Country name resolved from geocoding |
| `timezone` | string | IANA timezone (e.g. `Europe/London`) |
| `dataType` | string | `hourly`, `daily`, or `geocoding` |
| `time` | string | ISO datetime (`2025-07-08T14:00`) for hourly; `2025-07-08` for daily |
| `temperature` | number | Air temperature at 2 m in °C (hourly rows) |
| `temperatureMax` | number | Maximum daily temperature in °C (daily rows) |
| `temperatureMin` | number | Minimum daily temperature in °C (daily rows) |
| `precipitation` | number | Precipitation amount in mm |
| `windSpeed` | number | Wind speed at 10 m above ground in km/h |
| `humidity` | number | Relative humidity at 2 m in % |
| `weatherCode` | number | WMO weather interpretation code |
| `weatherDescription` | string | Human-readable condition (e.g. `Moderate rain`, `Clear sky`) |
| `name` | string | Official city name (geocoding rows only) |
| `population` | number | City population estimate (geocoding rows only) |
| `admin1` | string | State or region (geocoding rows only) |

**Example output row (hourly forecast):**

```json
{
  "location": "London",
  "latitude": "51.50853",
  "longitude": "-0.12574",
  "country": "United Kingdom",
  "timezone": "Europe/London",
  "dataType": "hourly",
  "time": "2025-07-08T14:00",
  "temperature": "22.4",
  "temperatureMax": "",
  "temperatureMin": "",
  "precipitation": "0.0",
  "windSpeed": "18.3",
  "humidity": "55",
  "weatherCode": "1",
  "weatherDescription": "Mainly clear",
  "name": "",
  "population": "",
  "admin1": "England"
}
````

### How to use

#### Option A — Forecast by city names

This is the most common usage. Provide a list of city names; the actor geocodes them automatically.

1. Open the actor on Apify and click **Try for free**.
2. Set **Mode** to `forecast`.
3. Add your city names to the **Locations** field: `London`, `Tokyo`, `New York`, `Berlin`.
4. Set **Include Hourly Data** to `true`, **Forecast Days** to `7`.
5. Click **Run** and wait ~30 seconds.

**Input JSON:**

```json
{
  "mode": "forecast",
  "locations": ["London", "Tokyo", "New York", "Berlin"],
  "hourly": true,
  "daily": false,
  "forecastDays": 7
}
```

#### Option B — Historical data by coordinates or city

Retrieve past weather for any date range back to 1940.

1. Set **Mode** to `historical`.
2. Add locations by city name or `lat,lon` pairs: `"51.5074,-0.1278"`, `"Berlin"`.
3. Set **Start Date** and **End Date** in `YYYY-MM-DD` format.
4. Enable **Include Hourly Data** and/or **Include Daily Summaries**.

**Input JSON:**

```json
{
  "mode": "historical",
  "locations": ["Berlin", "Paris", "48.8566,2.3522"],
  "startDate": "2024-01-01",
  "endDate": "2024-01-31",
  "hourly": true,
  "daily": true
}
```

#### Option C — Geocoding

Resolve city names to coordinates for use in other workflows.

```json
{
  "mode": "geocoding",
  "locations": ["Amsterdam", "Springfield", "Melbourne"]
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `forecast` | `forecast`, `historical`, or `geocoding` |
| `locations` | string\[] | `["London"]` | City names or `"lat,lon"` strings |
| `startDate` | string | — | Required for `historical`; format `YYYY-MM-DD` |
| `endDate` | string | — | Required for `historical`; format `YYYY-MM-DD` |
| `hourly` | boolean | `true` | Include hourly rows (temperature, precipitation, wind, humidity, code) |
| `daily` | boolean | `false` | Include daily summary rows (max/min temp, precipitation sum) |
| `forecastDays` | integer | `7` | Days to forecast (1–16); only in `forecast` mode |
| `proxy` | object | — | Apify proxy config (not required; Open-Meteo is unrestricted) |

**Full input JSON example:**

```json
{
  "mode": "forecast",
  "locations": ["London", "Tokyo", "New York", "Berlin", "Sydney"],
  "hourly": true,
  "daily": true,
  "forecastDays": 14,
  "proxy": {
    "useApifyProxy": false
  }
}
```

### Output example

```json
[
  {
    "location": "Tokyo",
    "latitude": "35.6895",
    "longitude": "139.6917",
    "country": "Japan",
    "timezone": "Asia/Tokyo",
    "dataType": "hourly",
    "time": "2025-07-08T09:00",
    "temperature": "31.2",
    "temperatureMax": "",
    "temperatureMin": "",
    "precipitation": "0.1",
    "windSpeed": "12.5",
    "humidity": "72",
    "weatherCode": "3",
    "weatherDescription": "Overcast",
    "name": "",
    "population": "",
    "admin1": "Tokyo"
  },
  {
    "location": "Tokyo",
    "latitude": "35.6895",
    "longitude": "139.6917",
    "country": "Japan",
    "timezone": "Asia/Tokyo",
    "dataType": "daily",
    "time": "2025-07-08",
    "temperature": "",
    "temperatureMax": "33.4",
    "temperatureMin": "26.1",
    "precipitation": "2.3",
    "windSpeed": "",
    "humidity": "",
    "weatherCode": "",
    "weatherDescription": "",
    "name": "",
    "population": "",
    "admin1": "Tokyo"
  }
]
```

### Tips for best results

- **Use lat/lon for precision**: city names like "Springfield" match multiple cities; use `"39.7994,-89.6502"` for Springfield, IL to be exact.
- **Historical long ranges**: for a 1-year historical pull, you'll get 365 × 24 = 8,760 hourly rows per location — scale up memory only if you're querying 50+ locations simultaneously.
- **Combine hourly + daily**: setting both `hourly: true` and `daily: true` gives you both granular time series and clean daily summaries in the same run.
- **Geocoding first**: if you're unsure of spelling or which city is returned, run `mode: geocoding` first to inspect resolved names and pick the right one.
- **Forecast days 16**: the maximum lookahead is 16 days; for longer planning horizons, re-run the actor on a schedule.
- **Historical start date**: Open-Meteo archive goes back to January 1, 1940 for ERA5 reanalysis data. Use `start_date: "1940-01-01"` for deep historical pulls.
- **No proxy needed**: Open-Meteo does not block datacenter IPs; you can disable proxy entirely to save costs.
- **Batch big city lists**: you can put 100+ cities in a single run; the actor processes them sequentially and pushes data incrementally so you can monitor progress in real time.
- **Schedule daily forecasts**: set up a daily Apify Schedule to refresh your dataset with the latest 7-day or 16-day forecast automatically.
- **Export to Google Sheets**: use Apify's built-in Google Sheets integration to pipe the dataset directly into a spreadsheet — great for team dashboards.

### Integrations

**Google Sheets**: connect via Apify's native Google Sheets integration — select your run's dataset and map columns automatically. Ideal for sharing weather dashboards with non-technical stakeholders.

**Zapier / Make**: use the Apify trigger ("Actor run finished") to push weather rows to any Zapier or Make scenario — send Slack alerts when rain probability exceeds a threshold, update a CRM with weather context, or log to Airtable.

**Webhooks**: configure an Apify webhook on run completion to POST the dataset URL to your own API endpoint for downstream processing.

**Scheduled runs**: use Apify Scheduler to run the actor every morning at 6 AM UTC and maintain a fresh 7-day forecast dataset for your application.

**API**: access results programmatically via the Apify dataset API — filter, paginate, and export in any format without leaving your codebase.

### API usage

**cURL:**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~open-meteo-weather-scraper/runs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{"mode":"forecast","locations":["London","Tokyo"],"hourly":true,"forecastDays":7}'
```

**Node.js:**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('logiover/open-meteo-weather-scraper').call({
  mode: 'forecast',
  locations: ['London', 'Tokyo', 'Berlin'],
  hourly: true,
  forecastDays: 7,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'weather rows');
```

**Python:**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("logiover/open-meteo-weather-scraper").call(run_input={
    "mode": "forecast",
    "locations": ["London", "Tokyo", "Berlin"],
    "hourly": True,
    "forecastDays": 7,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"{len(items)} weather rows")
```

### Use with AI agents (MCP)

Open-Meteo Weather Scraper is available as an MCP (Model Context Protocol) tool on Apify, making it callable by AI agents and LLM-powered workflows. Connect it via the Apify MCP server and instruct your agent: *"Get hourly weather forecasts for London, Tokyo, and New York for the next 7 days and summarize the rain risk for each city."* The agent will call this actor, receive structured rows, and synthesize a natural-language report — no coding required.

### FAQ

#### Does this actor require an API key?

No. Open-Meteo is a completely free and open weather API that requires no registration, no API key, and no login. You can run this actor with zero configuration beyond specifying your locations.

#### How far back can I request historical data?

Open-Meteo's ERA5 reanalysis archive covers global weather data from January 1, 1940 to present. You can request any date range within that window using `mode: historical`.

#### How many locations can I scrape in one run?

There is no hard limit. The actor processes locations sequentially; practical limits depend on Apify's compute timeout. For 100 locations × 7-day hourly forecast, expect ~16,800 rows and a runtime of 2–5 minutes with 512 MB memory.

#### What happens if a city name is ambiguous?

The actor takes the top geocoding result (by population rank) returned by Open-Meteo's geocoding API. Use `mode: geocoding` first to inspect which city is matched, then switch to `lat,lon` format if you need a specific city.

#### Why are some fields empty in the output?

Fields like `temperatureMax`/`temperatureMin` are only populated in daily rows; `temperature` is only populated in hourly rows. Geocoding rows only populate `name`, `population`, and `admin1`. Empty strings mean "not applicable for this row type" — not missing data.

#### Can I export results to Excel or CSV?

Yes. From your Apify dataset page, click "Export" and choose CSV, JSON, JSONL, or Excel. You can also configure the actor to send results directly to Google Sheets.

#### How fast is a typical run?

For 4 cities × 7-day hourly forecast (~672 rows), expect 15–30 seconds total run time. Historical runs for long date ranges over many cities take longer due to larger API payloads.

#### Is the weather data accurate?

Open-Meteo combines multiple meteorological models (ECMWF, GFS, DWD) and provides forecast accuracy comparable to national weather services. Historical data is ERA5 reanalysis, the gold standard in climate science.

#### How is this different from OpenWeatherMap or WeatherAPI?

Those services require an API key and have strict free-tier rate limits. Open-Meteo is fully open, has no rate limit for reasonable usage, and is specifically designed for data-intensive applications. This actor makes it trivially easy to extract bulk weather data without managing API credentials.

#### How often should I schedule a run?

For 7-day forecasts, daily runs are sufficient. For real-time operational use (e.g. logistics dispatch), you can run every hour. Open-Meteo updates its model data every 1–6 hours depending on the underlying weather model.

#### Does it work for any location on Earth?

Yes. Open-Meteo covers the entire globe using a global weather model grid. Even remote locations without named cities can be queried using lat/lon coordinates.

#### What do WMO weather codes mean?

WMO (World Meteorological Organization) codes are an international standard: 0 = clear sky, 1–3 = partly to fully cloudy, 45–48 = fog, 51–67 = drizzle and rain, 71–77 = snow, 80–82 = showers, 95–99 = thunderstorms. The `weatherDescription` field translates these to plain English automatically.

### Is it legal?

Open-Meteo is an open-source weather API released under the Creative Commons Attribution 4.0 license. The data is publicly available and explicitly licensed for commercial and non-commercial use. This actor does not scrape any website or bypass any access control; it calls official, documented, publicly advertised API endpoints. Attribution to Open-Meteo is appreciated per their license terms. This actor respects all API terms of service.

### Related scrapers

- [B2B Lead Scraper](https://apify.com/logiover/b2b-lead-scraper) — Extract business leads with contact details from OpenStreetMap for any industry and country.
- [CVE Security Advisory Monitor](https://apify.com/logiover/cve-advisory-monitor) — Track new CVEs and security advisories from NVD, fully keyless.
- [Bulk DNS Lookup](https://apify.com/logiover/bulk-dns-lookup) — Resolve thousands of domains to IP addresses, MX records, and DNS info in one run.
- [Certificate Transparency Monitor](https://apify.com/logiover/ct-monitor) — Monitor crt.sh for new SSL certificates matching your domains, keyless.

# Actor input Schema

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

Operation mode: 'forecast' for up to 16-day forecasts, 'historical' for past weather data (needs a date range), 'geocoding' to resolve city names to coordinates.

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

List of locations. Use city names (e.g. 'London', 'Tokyo') or 'lat,lon' format (e.g. '51.5074,-0.1278'). Leave empty to get current + forecast weather for a set of major world cities.

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

Start date for historical data in YYYY-MM-DD format. Required for historical mode.

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

End date for historical data in YYYY-MM-DD format. Required for historical mode.

## `hourly` (type: `boolean`):

Include hourly weather data (temperature, precipitation, wind speed, humidity, weather code). Each location × 24 hours × forecastDays = many rows.

## `daily` (type: `boolean`):

Include daily summary data (max/min temperature, total precipitation, weather code). If both hourly and daily are off, daily is used automatically.

## `forecastDays` (type: `integer`):

Number of days to forecast ahead (1–16). Default is 7.

## `temperatureUnit` (type: `string`):

Unit for temperature values.

## `windSpeedUnit` (type: `string`):

Unit for wind speed values.

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

Proxy settings (AUTO recommended). Open-Meteo is a public API; the actor also falls back to a direct connection on the final retry.

## Actor input object example

```json
{
  "mode": "forecast",
  "locations": [
    "London",
    "New York",
    "Tokyo",
    "Paris",
    "Berlin",
    "Sydney",
    "Los Angeles",
    "Singapore"
  ],
  "startDate": "",
  "endDate": "",
  "hourly": true,
  "daily": false,
  "forecastDays": 7,
  "temperatureUnit": "celsius",
  "windSpeedUnit": "kmh",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/open-meteo-weather-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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("logiover/open-meteo-weather-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/open-meteo-weather-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Open-Meteo Weather Scraper — Forecast, Historical & Geocoding",
        "description": "Scrape Open-Meteo by city name or lat/lon. Extract hourly temperature, precipitation, wind speed, humidity, and weather code for forecast (16 days) or historical date ranges. No API key, no login.",
        "version": "1.0",
        "x-build-id": "n0lcCAHWefU5jEBFM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~open-meteo-weather-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-open-meteo-weather-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/logiover~open-meteo-weather-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-open-meteo-weather-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/logiover~open-meteo-weather-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-open-meteo-weather-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": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "forecast",
                            "historical",
                            "geocoding"
                        ],
                        "type": "string",
                        "description": "Operation mode: 'forecast' for up to 16-day forecasts, 'historical' for past weather data (needs a date range), 'geocoding' to resolve city names to coordinates.",
                        "default": "forecast"
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "List of locations. Use city names (e.g. 'London', 'Tokyo') or 'lat,lon' format (e.g. '51.5074,-0.1278'). Leave empty to get current + forecast weather for a set of major world cities.",
                        "default": [
                            "London",
                            "New York",
                            "Tokyo",
                            "Paris",
                            "Berlin",
                            "Sydney",
                            "Los Angeles",
                            "Singapore"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "startDate": {
                        "title": "Start Date (historical mode)",
                        "type": "string",
                        "description": "Start date for historical data in YYYY-MM-DD format. Required for historical mode.",
                        "default": ""
                    },
                    "endDate": {
                        "title": "End Date (historical mode)",
                        "type": "string",
                        "description": "End date for historical data in YYYY-MM-DD format. Required for historical mode.",
                        "default": ""
                    },
                    "hourly": {
                        "title": "Include Hourly Data",
                        "type": "boolean",
                        "description": "Include hourly weather data (temperature, precipitation, wind speed, humidity, weather code). Each location × 24 hours × forecastDays = many rows.",
                        "default": true
                    },
                    "daily": {
                        "title": "Include Daily Summaries",
                        "type": "boolean",
                        "description": "Include daily summary data (max/min temperature, total precipitation, weather code). If both hourly and daily are off, daily is used automatically.",
                        "default": false
                    },
                    "forecastDays": {
                        "title": "Forecast Days (forecast mode)",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of days to forecast ahead (1–16). Default is 7.",
                        "default": 7
                    },
                    "temperatureUnit": {
                        "title": "Temperature Unit",
                        "enum": [
                            "celsius",
                            "fahrenheit"
                        ],
                        "type": "string",
                        "description": "Unit for temperature values.",
                        "default": "celsius"
                    },
                    "windSpeedUnit": {
                        "title": "Wind Speed Unit",
                        "enum": [
                            "kmh",
                            "ms",
                            "mph",
                            "kn"
                        ],
                        "type": "string",
                        "description": "Unit for wind speed values.",
                        "default": "kmh"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings (AUTO recommended). Open-Meteo is a public API; the actor also falls back to a direct connection on the final retry."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
