→ مجموعات البيانات

أسعار الوقود الشهرية — بنزين ٩١ و٩٥ والديزل

محدَّث

شهري · البيانات حتى 2026-07 · ٣٨٤ صفًا

بنزين ٩١ (بيسة/لتر)

2015-122026-07

2026-07: ٢٢٩

بنية الجدول

العمودالنوعالمدى المقبول
monthstr
fuel_typestr
price_baisaint100 – 1000
sourcestr

أحدث الصفوف

monthfuel_typeprice_baisasource
2026-04m95239subsidy-cap-freeze
2026-05diesel258subsidy-cap-freeze
2026-05m91229subsidy-cap-freeze
2026-05m95239subsidy-cap-freeze
2026-06diesel258subsidy-cap-freeze
2026-06m91229subsidy-cap-freeze
2026-06m95239subsidy-cap-freeze
2026-07diesel258nss.gov.om
2026-07m91229nss.gov.om
2026-07m95239nss.gov.om

استخدم الواجهة البرمجية

curl https://omandata.dev/v1/fuel_prices/latest.json

التنزيلات

المصدر الرسمي

National Subsidy System (nss.gov.om) + reconciled archive of Ministry of Energy and Minerals monthly announcements

رخصة البيانات: Mixed — see notes

ملاحظات المصدر

Monthly retail fuel prices for the Sultanate of Oman in baisa per litre (1000 baisa = 1 OMR), inclusive of VAT per the National Subsidy System's own footnote. These are pump prices, not the subsidised rate: the NSS scheme pays part of the bill for registered low-income Omani nationals, whose M91 rate is 180 baisa/litre for up to 400 litres a month, and quoting that 180 as "the price of petrol in Oman" understates the pump price by a fifth. fuel_type is one of m91, m95, diesel. Mogas 98 (Ultimax) is deliberately out of scope: only the three subsidised grades are announced as national prices. No official machine-readable archive of these announcements exists, so the history is curated in prices.csv and every row declares its own provenance in the source column. Dec 2015 - Jan 2023 is reconciled from two independent compilations of the ministry's monthly announcements — the opendata.om community compilation (which credits Omani outlets Atheer and Al-Roya and the fuel marketers) and thefuelprice.com's Oman archive. Provenance is recorded per row — per month AND per fuel — because coverage differs by grade. A source of archive-corroborated means at least two independent records agree, either both compilations or one compilation and a dated press report, and covers 238 of the 258 archive rows. archive-single-source means no second record was retrievable, and it is down to eight rows: the regular-grade price for Feb-Jun 2016, where thefuelprice.com does carry the month and agrees on M95 and diesel but lists no row for the regular grade at all (the grade of the day was M-90, which it does not publish), and all three grades for Dec 2022, which falls after its Oman series stops. archive-news-resolved means the compilations disagreed and a dated primary record settled it. Fifteen months spread across the span were additionally checked against the original press announcements and every one matched the reconciliation exactly, which is the basis for trusting the corroborated rows in between. Do not treat the compilations as interchangeable: reconciling them found four wrong months, and neither source was reliably the wrong one. opendata.om carries January 2019's prices under December 2018 and repeats autumn-2020 prices under October and November 2019; thefuelprice.com is wrong for November 2018. The adjudicated values are M91/M95/diesel 222/233/261 for 2018-11 and 211/223/251 for 2018-12, both stated in the Times of Oman announcement of 1 December 2018 (archived at https://web.archive.org/web/20181203182757/https://timesofoman.com/article/521272/Oman/Fuel-prices-for-December-2018-announced-in-Oman which gives December's prices and November's in the same sentences); and 207/217/245 for 2019-10 and 203/216/240 for 2019-11, read off Oman Oil Marketing's own retail board archived at https://web.archive.org/web/20191020004201/https://www.oomco.com/ and https://web.archive.org/web/20191112230923/https://www.oomco.com/ . Two caveats about the opening of the series, both from the same press record. Oman only deregulated fuel prices in January 2016, so the Dec 2015 row (114/120/146) is the long-standing administered price rather than a monthly announcement — the regular grade had reportedly not moved since at least 1998. And the Jan 2016 row (140/160/160) is the first deregulated price, which took effect on 15 January 2016 and ran to the end of the month; the first fortnight of January was still at the December level. A month-keyed table cannot express that, so Jan 2016 carries the announced new price and this note carries the qualification. Feb 2023 onward (source=subsidy-cap-freeze) is generated from the price cap rather than observed month by month. Sultan Haitham bin Tariq announced the cap on 9 November 2021; it took effect on 1 December 2021, pegs the three grades to their October 2021 average — M91 229, M95 239, diesel 258 baisa — and was originally to run to the end of 2022 but has been maintained since, with the government absorbing the difference. That is why the series goes flat from 2021-12 and why November 2021 (233/242/275) is the last month above the cap. The generated span was spot-verified against Oman Oil Marketing's archived monthly boards for 2023-06, 2024-11, 2025-08 and 2026-01, all 229/239/258, and no announcement of a change was found anywhere between them. A useful integrity check on those boards: Mogas 98, which is not capped, moves from month to month on the same board (335 in Jun 2023, 329 in Nov 2024, 327 in Aug 2025, 399 in 2026), so the flat 229/239/258 is a real standing price and not a stale page. The m91 series splices a grade change. Oman withdrew Mogas 90 and replaced it with Mogas 91 in Nov 2016, and the compilations carry the two as strictly complementary columns that are never both populated. This dataset publishes their union as one continuous regular-grade series named m91, because that is the series consumers want and the level is continuous across the switch (169 baisa in Oct 2016, 173 in Nov 2016). Rows before 2016-11 are therefore M-90 prices; read the series as "the regular grade of the day". The current month is scraped from the official NSS homepage, which publishes that month only and no history. source=nss.gov.om therefore marks two things that are really the same thing: the month currently on the page, and months that were on the page during an earlier run and have since been written into prices.csv. They have to be retained, because once a month rolls over NSS drops it and it is not recoverable from any official source — so the pipeline writes each newly scraped month back into prices.csv, and the monthly refresh commits that file alongside the published data. The write happens only after the run's validation gate has accepted the frame, and it is a separate step from parsing for exactly that reason: prices.csv is what every later run cross-checks against, so a bad reading written there would become the truth and the correct reading, arriving later, would be the thing rejected for disagreeing with it. A validation-failed run leaves prices.csv untouched, and the refresh workflow stages that file only when this dataset succeeded. That write-back is what keeps the series continuous while the refresh runs on schedule. When it does not run, the month it missed exists in no source at all, and the pipeline fills it from the price cap under a narrow, stated condition: the cap must hold on both sides of the hole — the month before it in the CSV and the month NSS is showing must both be exactly 229/239/258 — and at most three consecutive months may be filled this way. Those rows are labelled subsidy-cap-freeze, the same provenance as the hand-curated 2023-02 tail and for the same reason: they were derived from the cap, not observed. Beyond three months the pipeline stops and asks for the interval to be checked against archived price boards, because the inference gets weaker the wider it spans. If NSS shows anything other than the cap while months are missing, nothing is filled and the run fails naming the cap: a lifted cap could have moved prices anywhere inside the hole, and inventing a flat run through a price change would bury the single most newsworthy event this dataset can record. A cap lift in a month that needs no inference is different: NSS is the official source and the new price is simply recorded from it. That one surfaces through the test suite rather than the pipeline — the test pinning the tail flat at the capped prices goes red as soon as an off-cap month lands in the CSV — but not immediately: GitHub does not trigger workflows for pushes made with GITHUB_TOKEN, so the refresh bot's own commit runs no tests and the alarm waits for the next human push. Adding a suite run to the refresh workflows would close that delay. UNRESOLVED, and it blocks the automation rather than the data: nss.gov.om is not reachable from GitHub-hosted runners. Two refresh-monthly runs on 2026-07-31 (runs 30659620073 and 30659930540) both died on a TCP connect timeout to 77.83.62.111:443 after 120s, while the same request from a Muscat connection returned 200 with the price panel intact in 0.8s. A dropped SYN rather than an HTTP 403 means it is network-level — a geo-fence or source-IP filter, not a user-agent block — so retries and header changes will not help. Until it is resolved (an Oman-side self-hosted runner, an egress proxy, or accepting a manual monthly run) this dataset fails every scheduled refresh, the other three monthly datasets still publish, and the last-good fuel data stays up. The three-month auto-extend bound above is what stops that outage from quietly turning into invented data. A second guard covers the opposite risk: if NSS ever states a different price for a month prices.csv already covers, the pipeline raises instead of silently preferring either number. The NSS page states the prices twice, in a structural price panel and in an advisory ticker, and the two are cross-checked on every run; the ticker sometimes carries maintenance notices instead of prices, so it is optional, but when present it must agree.