Ventusky Weather Forecast Scraper avatar

Ventusky Weather Forecast Scraper

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Ventusky Weather Forecast Scraper

Ventusky Weather Forecast Scraper

Lightweight weather & air quality scraper for Ventusky. Get hourly, 8-day, and 14-day forecasts globally without expensive API keys or heavy browser automation.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

Xtractoo

Xtractoo

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

8 days ago

Last modified

Share

Ventusky Weather Scraper

Extract real-time weather forecasts directly from ventusky.com using reverse-engineered HTTP endpoints - no browser, no Playwright, no API key required.

Input a list of coordinates or city names, get back structured JSON with current conditions, hourly & 8-day forecasts, 14-day meteogram summaries, and air quality data. Each location costs 1–2 HTTP calls and completes in under 1 second (without AQI) or 2–6 seconds (with AQI).


Why use this Actor?

This ActorOfficial APIBrowser scraping
CostFree (Ventusky has no public API)N/AHigh memory
Speed~0.4s per location-~5–15s per page
Data depthCurrent + 25h hourly + 8-day daily + 14-day meteogram-Same, slower
AQI✅ Real-time WAQI data-
InfrastructureLightweight HTTP-Chromium required
Scales to 1,000+ locs✅ Concurrent, configurable-Memory-constrained

Use Cases

  • Weather dashboards - Embedded forecasts for apps, websites, IoT dashboards
  • Agriculture & logistics - Daily precipitation, gust, snow outlook for route planning
  • Research & datasets - Bulk weather data collection across hundreds of cities
  • Alert systems - Poll every 30 min, trigger webhooks on rain_probability > 70%
  • Travel apps - Pre-trip 8-day forecast + air quality for any destination worldwide
  • etc...

Input

{
"locations": [
{ "lat": -6.2088, "lon": 106.8456, "label": "Jakarta" },
{ "lat": 40.7128, "lon": -74.006, "label": "New York" },
{ "city": "Tokyo", "label": "Tokyo" },
{ "city": "London", "label": "London" }
],
"skipAqi": false,
"maxConcurrency": 3
}

Input fields

FieldTypeRequiredDefaultDescription
locationsarray-List of locations to scrape
locations[].latnumber--Latitude in decimal degrees (e.g. -6.2088)
locations[].lonnumber--Longitude in decimal degrees (e.g. 106.8456)
locations[].citystring--City/place name instead of coordinates. Auto-geocoded via Nominatim OSM.
locations[].labelstring--Optional human-readable tag, included in _meta.label
skipAqiboolean-falseSkip the WAQI AQI API call. Saves 1–5s per location when air quality data is not needed.
maxConcurrencyinteger-3Max locations scraped simultaneously (1–10).

Each location must have either lat + lon or city. If both are given, lat/lon takes priority.


Sample Output

One dataset item per location. Below is real output for New York (April 14, 2026):

{
"_meta": {
"label": "New York",
"lat": 40.7128,
"lon": -74.006,
"elapsed_s": 5.21
},
"location": {
"name": "New York",
"latitude": "40°42'N",
"longitude": "74°0'W",
"elevation_m": null,
"timezone": "America/New_York (UTC-4)",
"coordinates_raw": "40.71;-74.01;New York;new-york"
},
"current_weather": {
"condition": "clear sky",
"temperature": "16.7 °C",
"wind_speed": "11 km/h",
"pressure": "1016 hPa",
"visibility": "16 km",
"clouds": "0 %",
"station_info": "Weather report from station Manhattan/dwntwn, Distance: 2 km (06:56 2026/04/14)"
},
"hourly_forecast": [
{
"time": "08:00",
"time_epoch": 1776171600,
"condition": "clear sky",
"temperature": "19 °C",
"precipitation": "0 mm",
"rain_probability": "0 %",
"wind_direction": "SW",
"wind_speed": "4 km/h"
},
{
"time": "09:00",
"time_epoch": 1776175200,
"condition": "clear sky",
"temperature": "22 °C",
"precipitation": "0 mm",
"rain_probability": "0 %",
"wind_direction": "S",
"wind_speed": "3 km/h"
},
// ... 14 more today slots ...
{
"time": "00:00 tomorrow",
"time_epoch": 1776229200,
"condition": "overcast",
"temperature": "21 °C",
"precipitation": "0 mm",
"rain_probability": "10 %",
"wind_direction": "SW",
"wind_speed": "18 km/h"
}
// ... 8 more tomorrow slots (total 25 hourly slots)
],
"daily_forecast": [
{
"date": "2026/04/15",
"slots": [
{
"time": "01:00",
"time_epoch": 1776232800,
"temperature": "20 °C",
"condition": "overcast",
"precipitation": "0 mm",
"wind_speed": "16 km/h",
"gust_speed": "32 km/h",
"wind_direction": "SW",
"wind_direction_deg": 225,
"rain_probability": "10 %"
},
{
"time": "04:00",
"time_epoch": 1776243600,
"temperature": "18 °C",
"condition": "clear sky",
"precipitation": "0 mm",
"wind_speed": "7 km/h",
"gust_speed": "18 km/h",
"wind_direction": "SW",
"wind_direction_deg": 225,
"rain_probability": "0 %"
}
// ... 6 more slots per day (07:00, 10:00, 13:00, 16:00, 19:00, 22:00)
]
}
// ... 7 more days (2026/04/16 through 2026/04/22, total 8 days × 8 slots)
],
"meteogram": {
"timezone": "America/New_York",
"days": [
{
"date": "14/04/2026",
"date_epoch": 1776142800,
"day": "Tue",
"min_temp": 17,
"max_temp": 31,
"rain_total_mm": 0.3,
"gust_kmh": 40,
"snow_cm": 0.0,
"weather_symbol": 1
},
{
"date": "15/04/2026",
"date_epoch": 1776229200,
"day": "Wed",
"min_temp": 18,
"max_temp": 30,
"rain_total_mm": 1.0,
"gust_kmh": 36,
"snow_cm": 0.0,
"weather_symbol": 2
}
// ... 12 more days (total 14 days, through 2026/04/27)
]
},
"air_quality": {
"quality": "Good",
"quality_index": 0,
"description": "Air quality index (marked as AQI) is developed by Environmental Protection Agency...",
"value": 55,
"station_within_range": true,
"station_name": "New York",
"station_dist_km": 0.0,
"dominant_pollutant": "pm25",
"pollutants": {
"pm25": 55,
"t": 19.4,
"h": 79.6,
"p": 1017.5,
"w": 3.5
}
}
}

Output field reference

_meta

FieldDescription
labelThe label value from the input (if provided)
lat / lonResolved coordinates used for the request
elapsed_sTotal scrape time for this location in seconds

location

FieldDescription
nameLocation display name from Ventusky
latitude / longitudeDMS-formatted coordinates (e.g. "40°42'N")
elevation_mElevation in meters, or null if not shown
timezoneIANA timezone name + UTC offset (e.g. "America/New_York (UTC-4)")
coordinates_rawInternal Ventusky coordinate string

current_weather

Current conditions from the nearest weather station.

FieldDescription
conditionText description of current sky/precipitation (e.g. "clear sky")
temperatureTemperature with unit (e.g. "16.7 °C")
wind_speedWind speed (e.g. "11 km/h")
pressureAtmospheric pressure (e.g. "1016 hPa")
visibilityVisibility distance (e.g. "16 km")
cloudsCloud cover percentage
cloud_baseCloud base altitude (when clouds are present)
station_infoSource station name, distance, and observation time

hourly_forecast - 25 hourly slots

Today's remaining hours + next morning. Fields per slot:

FieldDescription
timeLocal time label (e.g. "17:00", "02:00 tomorrow")
time_epochUTC Unix timestamp of the slot
conditionSky/precipitation condition text
temperatureTemperature string
precipitationPrecipitation in mm
rain_probabilityProbability of rain (%)
wind_directionCompass label (e.g. "SW", "NW")
wind_speedWind speed string

daily_forecast - 8 days × 8 slots (every 3 hours)

Each day object has date (YYYY/MM/DD) and a slots array. Each slot:

FieldDescription
time / time_epoch3-hour slot time (01:00, 04:00 … 22:00) and UTC epoch
temperatureTemperature at this slot
conditionWeather condition text
precipitationPrecipitation mm
wind_speed / gust_speedWind and gust speed
wind_direction / wind_direction_degDirection label and degrees
rain_probabilityRain probability % (may be null for distant future slots)

meteogram - 14-day daily summary

days array, one entry per calendar day.

FieldDescription
date / date_epochDate (DD/MM/YYYY) and UTC epoch of local midnight
dayDay abbreviation (e.g. "Tue", "Wed")
min_temp / max_tempDaily min/max temperature (°C)
rain_total_mmTotal daily accumulated rain (mm)
gust_kmhMax daily wind gust (km/h)
snow_cmTotal daily snow accumulation (cm)
weather_symbolVentusky weather symbol code

air_quality

FieldDescription
qualityHuman-readable band (e.g. "Good", "Moderate")
quality_index0=Good, 1=Moderate, 2=USG, 3=Unhealthy, 4=Very Unhealthy, 5=Hazardous
descriptionEPA AQI scale description
valueNumeric AQI (0–500), always returned (never suppressed)
station_within_rangetrue if nearest station ≤ 10 km
station_nameName of the WAQI reporting station
station_dist_kmDistance to reporting station in km
dominant_pollutantPrimary pollutant key (e.g. "pm25")
pollutantsMap of individual readings (pm25, pm10, o3, t, h, p, w)

Data Source & Freshness


Sample Integrations

Retrieve results:

GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json

Zapier / Make

Use the Apify connector → "Watch Actor Run" trigger → parse defaultDatasetId → fetch dataset items.

Scheduled runs

Set a Cron schedule under Actor → Settings → Scheduling. Example for every 6 hours:

0 */6 * * *

API call example

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"locations": [
{ "city": "Jakarta" },
{ "lat": 40.7128, "lon": -74.006, "label": "New York" }
],
"skipAqi": false,
"maxConcurrency": 3
}'

Support

  • Found a bug or the site structure changed? Open an issue on the Actor's page.
  • For integration help, write in the Actor discussion forum on Apify Console.