# Austria Official Weather — GeoSphere Stations & Forecasts (`promptica/austria-official-weather-geosphere`) Actor

Official Austrian weather observations, hourly/daily history and point forecasts from GeoSphere Austria, with persistent monitoring.

- **URL**: https://apify.com/promptica/austria-official-weather-geosphere.md
- **Developed by:** [Lorenzo Talamucci](https://apify.com/promptica) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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.

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

## Austria Official Weather — GeoSphere Stations & Forecasts

Get Austrian weather observations, hourly/daily history and numerical point forecasts from the official **GeoSphere Austria Dataset API**. Export structured records to CSV, Excel, JSON or your operational pipeline.

Use it for construction scheduling, agricultural weather analysis, energy modelling and insurance research. This Actor normalizes public data and runs persistent monitoring; it does not replace official warnings or certify insurance claims.

### Quick start

```json
{"dataset":"current","stationIds":["11035"],"maxResults":5}
```

The prefilled input retrieves the latest observation for Wien Hohe Warte. One result means one location and timestamp, with all requested parameters together. Missing values remain null; rows where every requested value is missing are omitted.

### Datasets and parameter codes

| Input dataset | Official resource | Default parameters | Coverage |
|---|---|---|---|
| `current` | TAWES v1 10min | TL, RR, FF, SCHNEE | Latest station observations |
| `historical10min` | TAWES v1 10min | TL, RR, FF, SCHNEE | Recent archive, approximately 3 months |
| `hourly` | Klima v2 1h | tl, rr, ff, sh | Station-dependent historical hourly records |
| `daily` | Klima v2 1d | tl\_mittel, rr, vv\_mittel, sh | Station-dependent archive; catalog starts in 1775 |
| `forecast` | NWP v2 1h 1km | 2t, tp, 10u, 10v | Hourly grid forecast, approximately 60 hours |

Parameters are validated against live dataset metadata. You can supply other official codes through `parameters`. Dataset availability, station history and future forecast windows vary. Forecasts are a prerelease API and may change.

**Station IDs differ by dataset:** Wien Hohe Warte is `11035` in TAWES and `105` in Klima. Forecast station IDs use TAWES metadata and are converted to coordinates. Never reuse a TAWES ID blindly in Klima.

```json
{"dataset":"hourly","stationIds":["105"],"start":"2026-09-01T00:00","end":"2026-09-01T02:00","maxResults":100}
```

```json
{"dataset":"daily","municipality":"Wien","start":"2026-09-01","end":"2026-09-02","maxResults":100}
```

```json
{"dataset":"forecast","latitude":48.208,"longitude":16.373,"maxResults":24}
```

Choose **one** location selector: up to 20 `stationIds`, `latitude` + `longitude`, or `municipality`. For observations, coordinates select the nearest active station using its official metadata; the reported coordinates are that station's coordinates. For forecasts they select model grid points. Coordinate input is restricted to the Austrian bounding rectangle; this is not an exact national boundary check.

`municipality` matches a substring of official active **station names** (e.g. Wien), not an administrative geocoder. Up to 20 matching stations are returned. A municipality without a matching station requires coordinates. If no selector is supplied, current/10min/forecast defaults to TAWES 11035; hourly/daily defaults to Klima 1 (Aflenz).

Historical inputs require both `start` and `end`; boundaries are inclusive. Dates and timezone-free timestamps mean UTC. Current data rejects dates. Forecast dates are optional and must fall in the available run's horizon. Historical queries are split into bounded windows; `maxResults` counts delivered rows (1–10,000), not raw datapoints.

### Output

Each record includes `stationId` (null for a grid point), `name`, `latitude`, `longitude`, `timestamp`, `values` (official codes), `unit` (unit per code), `dataset`, `forecastReferenceTime`, `sourceUrl`, `scrapedAt`, `source` and `license`.

Convenience fields include `temperature`, `precipitation`, `windSpeed` and `snowDepth` when available. Forecast `windSpeed` is derived as hypot(10u,10v), in m/s. NWP snowfall is not snow depth; no snow-depth value is invented. Daily `vv_mittel` means average wind, while optional `ffx` is a gust and stays in raw `values`.

Units and source sentinel values are retained. In Klima daily data, `rr=-1` indicates no precipitation, `rr=0` indicates less than 0.1 mm, and `sh=-1` indicates no snow. Do not treat every negative measurement as an error. Accumulation periods and measurement definitions differ between datasets: compare raw parameter definitions before combining them. Forecast precipitation `tp` is supplied as kg/m², not silently converted.

### Persistent monitoring

```json
{"dataset":"current","stationIds":["11035"],"onlyNew":true,"monitorName":"vienna-weather","maxResults":100}
```

Use a named key-value store and schedule this input. `monitorNome` is a compatibility alias for `monitorName` and takes precedence when supplied. The first run emits records; later runs emit new timestamps or changed parameter values. Forecast reference time is part of identity. Selector/parameter sets have independent monitor scopes. Delivered records are checkpointed every 25 rows and at completion; a sudden process termination may replay the last batch. The store keeps at most 50,000 fingerprints per scope; older records can reappear after eviction. Runs sharing a monitor must not overlap (no cross-run locking). A small `maxResults` continues progress on later historical runs without marking undispatched records as seen.

### Reliability and limits

Requests are sequential and spaced at least 15 seconds apart (under 5 requests/second and 240/hour for one Actor run). GeoSphere quotas are shared by source IP: avoid overlapping runs and account for other users of a proxy IP. Transient 403/429/5xx errors receive bounded backoff retries and fresh proxy sessions when running on Apify. Retry-After is respected. No login/captcha bypass is performed.

Each historical response is planned below 50,000 raw values, with a 12 MB download ceiling. Execution stops only 30 seconds before the platform timeoutAt deadline, preserving output. Without timeoutAt (local execution), there is no internal runtime cap. Large date ranges may require several runs. Invalid input, unavailable sources and internal interruption complete cleanly with zero or partial results; inspect key-value store `OUTPUT` (`error`, `hint`, `pushed`, `scanned`, `unchanged`, `partial`). Clean completion alone is not proof that records were found.

### Pricing

| Event | Price (USD) |
|---|---:|
| Actor start, at default 1 GB | $0.05 |
| One location/timestamp result | $0.002 |

Prices will be configured by the publisher in Apify Console. No premium event is used. The `item` charge tolerates an undefined event during local/private testing. Increasing memory can increase the platform start-event charge.

### Source and license

Data © **GeoSphere Austria**, [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). The Actor transforms original GeoJSON into location/timestamp rows, adds English aliases and derives forecast wind speed. Keep this attribution and license when redistributing data.

Official references: [Dataset catalog](https://dataset.api.hub.geosphere.at/v1/datasets), [license policy](https://dataset.api.hub.geosphere.at/v1/docs/user-guide/license.html), [request limits](https://dataset.api.hub.geosphere.at/v1/docs/user-guide/request-limit.html), [official API documentation repository](https://github.com/Geosphere-Austria/dataset-api-docs). Access verified anonymously on 2026-09-28. The API host's robots.txt returned 404; the portal's restrictions refer to the portal, not this documented API.

### Development

Node 22+, `npm ci`, `npm test`, `apify run`. Tests cover invalid inputs, real source parsing, metadata coordinates, bounded windows, retries/proxy rotation and persistent monitoring. Default Actor memory is 1 GB. Cloud collaudo and publication are separate publisher steps.

# Actor input Schema

## `dataset` (type: `string`):

Dataset. See README for dataset-specific examples.

## `stationIds` (type: `array`):

Dataset-specific: TAWES Vienna 11035, Klima Vienna 105. Omit when supplying coordinates or municipality.

## `municipality` (type: `string`):

Matches official active station names, not a geocoder. Examples: Wien, Innsbruck.

## `latitude` (type: `number`):

Latitude. See README for dataset-specific examples.

## `longitude` (type: `number`):

Longitude. See README for dataset-specific examples.

## `start` (type: `string`):

Start (UTC ISO date/time). See README for dataset-specific examples.

## `end` (type: `string`):

End (UTC ISO date/time, inclusive). See README for dataset-specific examples.

## `parameters` (type: `array`):

Official parameter codes (optional). See README for dataset-specific examples.

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

Maximum output records. See README for dataset-specific examples.

## `onlyNew` (type: `boolean`):

Only new or changed records. See README for dataset-specific examples.

## `monitorName` (type: `string`):

Named monitor store. See README for dataset-specific examples.

## `monitorNome` (type: `string`):

Alias for monitorName; takes precedence when supplied. Use an isolated named store for each battery.

## Actor input object example

```json
{
  "dataset": "current",
  "stationIds": [
    "11035"
  ],
  "maxResults": 5,
  "onlyNew": false,
  "monitorName": "austria-weather-monitor"
}
```

# Actor output Schema

## `weather` (type: `string`):

No description

## `diagnostics` (type: `string`):

No description

# 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 = {
    "dataset": "current",
    "stationIds": [
        "11035"
    ],
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("promptica/austria-official-weather-geosphere").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 = {
    "dataset": "current",
    "stationIds": ["11035"],
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("promptica/austria-official-weather-geosphere").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 '{
  "dataset": "current",
  "stationIds": [
    "11035"
  ],
  "maxResults": 5
}' |
apify call promptica/austria-official-weather-geosphere --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,promptica/austria-official-weather-geosphere"
        }
    }
}
```

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/dfJ8wWp0uZMbUACQh/builds/jf871MccLFcbIU0yf/openapi.json
