Everything you need to pull satellite-derived carbon intelligence into your workflow in under 10 minutes. No setup calls required.
Authentication: Pass your API key in the X-API-Key header on every request. Do not include it in URLs.
Rate limits: Explorer — 1,000 calls/month. Professional — 10,000/month. Enterprise — unlimited. Your monthly counter resets on the 1st of each month.
Errors: HTTP 401 = missing key · 403 = invalid or expired key / subscription · 429 = quota exceeded. All errors return a JSON body with error and message fields.
curl "https://satclimatesignalsapi-698e01874e509203d1af5b00.base44.app?endpoint=status"
curl "https://satclimatesignalsapi-698e01874e509203d1af5b00.base44.app?endpoint=datasets" \ -H "X-API-Key: sk_sat_YOUR_API_KEY_HERE"
Daily thermal activity index for 15 EU industrial clusters (steel, cement, power, refinery) derived from Sentinel-3 SLSTR and VIIRS satellite observations. Designed as a leading proxy indicator for EUA demand.
Coverage: DE, FR, PL, NL, BE, ES, IT, CZ, RO, FI · Update cadence: daily · Time horizon: rolling 24-month history
Satellite-detected methane concentration anomalies from Sentinel-5P/TROPOMI. Covers oil & gas, landfill, coal mining, and agriculture sources globally. Each record is a geolocated emission event with severity triage scores.
Coverage: Global (major producing regions) · Update cadence: weekly · Time horizon: rolling 24-month history
| Field | Type | Description |
|---|---|---|
| timestamp | datetime (UTC) | Observation timestamp of the satellite overpass. |
| region | string (ISO-2) | ISO country code of the facility cluster (e.g. DE, PL, FR). |
| sector | string | Industrial sector: steel, cement, power, refinery. |
| facility_name | string | Human-readable label for the cluster (e.g. Ruhr Steel Corridor). |
| activity_index | float [0–100] | Normalised thermal activity index. 0 = idle, 100 = peak output. Derived from Sentinel-3 SLSTR + VIIRS thermal anomaly count. |
| delta_24h | float | 24-hour change in activity_index (percentage points). |
| delta_7d | float | 7-day change in activity_index (percentage points). |
| anomaly_score | float [0–100] | Deviation from 30-day rolling baseline. >10 = notable anomaly; >25 = significant event. |
| signal_confidence | float [0–100] | Data quality confidence: cloud coverage, satellite pass count, cross-sensor agreement. |
| trend | enum | Week-over-week direction: increasing | stable | decreasing. |
| signal_type | string | Internal label linking to ETS market (e.g. eua_steel, eua_power). |
| dataset_version | string | Dataset version (currently 1.0.0). Increment on schema change. |
| schema_version | string | Schema specification version (currently 1.0). |
| Field | Type | Description |
|---|---|---|
| timestamp | datetime (UTC) | UTC timestamp of the Sentinel-5P/TROPOMI overpass. |
| lat | float | Latitude of the detected emission centroid (decimal degrees, 5 d.p.). |
| lon | float | Longitude of the detected emission centroid (decimal degrees, 5 d.p.). |
| region | string (ISO-2) | ISO country code or regional label for the emission source. |
| facility_id | string | Facility or field identifier (matches MarketplaceArtifact catalog). |
| methane_ppb_anomaly | float | Atmospheric CH₄ column anomaly above local background (ppb). >20 ppb = detectable; >100 ppb = strong plume. |
| severity_score | float [0–100] | Composite severity: anomaly magnitude × persistence × plume area. Used for triage. |
| persistence_score | float [0–100] | Multi-day continuity score. High = recurring emission, not a one-off event. |
| detection_confidence | float [0–100] | Retrieval confidence from TROPOMI column data. Accounts for cloud fraction, aerosol loading, sun angle. |
| source_satellite | string | Instrument used (Sentinel-5P/TROPOMI is primary; VIIRS cross-validation). |
| dataset_version | string | Dataset version (currently 1.0.0). |
| schema_version | string | Schema specification version (currently 1.0). |
Proxy signals, not direct measurements
SatClimate data are satellite-derived proxy indicators. The activity_index is not a certified production figure — it is a normalised score derived from thermal radiance and anomaly detection algorithms. It correlates with industrial output but should not be treated as an official statistic.
EUA Activity Signal — how it' s built
Raw thermal anomaly counts from Sentinel-3 SLSTR and VIIRS are aggregated per cluster per day. A 30-day rolling baseline is computed for each cluster. The deviation from baseline, normalised to a 0–100 scale, forms the activity_index. Multi-sensor agreement increases signal_confidence; cloud cover or single-pass days reduce it.
Methane Anomaly Alarms — how it's built
TROPOMI Level-2 CH₄ column data (10 km × 10 km resolution) is filtered against a regional atmospheric background. Cells exceeding the background threshold are flagged as anomalies. Consecutive-day persistence is tracked to separate instrument noise from true emissions. The methane_ppb_anomaly is the excess above local background, not total atmospheric concentration.
Confidence and quality flags
Both datasets carry a confidence score. Values below 50 indicate reduced data quality (heavy cloud cover, single overpass, high aerosol loading) and should be used with caution or excluded from time-critical analysis. High-confidence records (≥80) are suitable for quantitative modelling.
Update cadence
EUA Activity Signal ingests daily. Methane Anomaly Alarms aggregate weekly (TROPOMI has a 14-day full global revisit). Data is typically available within 24–48 hours of satellite overpass for EUA, and 5–7 days for methane.
Intended use
These signals are designed for use as alternative data inputs to carbon trading models, ESG screening, and supply-chain scanning. They are not a substitute for official registry data, verified emissions reports, or primary production statistics.
Requires: pip install requests pandas
Replace sk_sat_YOUR_API_KEY_HERE with your key. Copy-paste and run.
import requests
import pandas as pd
API_KEY = "sk_sat_YOUR_API_KEY_HERE" # replace with your key
BASE_URL = "https://satclimatesignalsapi-698e01874e509203d1af5b00.base44.app"
headers = {"X-API-Key": API_KEY}
# ── 1. Fetch EUA Activity Signal ───────────────────────────────────────────
r = requests.get(
BASE_URL,
params={"endpoint": "dataset", "dataset": "satclimate_eua_activity_signal", "format": "json", "limit": 500},
headers=headers,
timeout=30,
)
r.raise_for_status()
eua = pd.DataFrame(r.json()["data"])
eua["timestamp"] = pd.to_datetime(eua["timestamp"])
eua = eua.sort_values("timestamp", ascending=False)
print(f"EUA Activity Signal: {len(eua)} records")
print(eua[["timestamp","region","sector","facility_name","activity_index","trend"]].head(10))
# ── 2. Fetch Methane Anomaly Alarms ────────────────────────────────────────
r2 = requests.get(
BASE_URL,
params={"endpoint": "dataset", "dataset": "satclimate_methane_anomaly_alerts", "format": "json", "limit": 500},
headers=headers,
timeout=30,
)
r2.raise_for_status()
methane = pd.DataFrame(r2.json()["data"])
methane["timestamp"] = pd.to_datetime(methane["timestamp"])
methane = methane.sort_values("timestamp", ascending=False)
print(f"\nMethane Anomaly Alarms: {len(methane)} records")
print(methane[["timestamp","region","facility_id","methane_ppb_anomaly","severity_score","source_satellite"]].head(10))
# ── 3. Filter high-severity methane events ─────────────────────────────────
high_sev = methane[methane["severity_score"] >= 70].copy()
print(f"\nHigh-severity methane events (score >= 70): {len(high_sev)}")
print(high_sev[["timestamp","region","facility_id","methane_ppb_anomaly","severity_score"]].to_string(index=False))
activity_index is a float 0–100; each methane_ppb_anomaly is ppb above local background.