United States dependence on Middle Eastern oil imports over time
Based on OECD Balanced International Merchandise Trade Statistics (BIMTS)1, I analysed mirror-trade data—Middle Eastern exports to the United States—to track US dependence on mineral-fuel supplies from the region over time. The product category used is HS 27 (mineral fuels, mineral oils and products of their distillation), which captures crude oil, refined products and related hydrocarbons23.
Key findings
- Peak dependence was around 2012–2014. Middle Eastern exports to the US accounted for roughly 21 % of all world mineral-fuel exports to the US in 2012, valued at about $87 billion out of a $415 billion total2.
- Dependence has fallen sharply since then. By 2024 the share dropped to about 9 % ($22 billion out of $242 billion)2.
- Saudi Arabia has consistently been the largest supplier, followed by Iraq as a significant secondary source. Iranian shipments are effectively absent from the data in recent decades because of sanctions2.
- The decline mirrors the broader trend of the US reducing its reliance on imported oil, partly driven by the growth of domestic shale production.
Trends over time
| Year | World exports to US ($ bn) | Middle East exports to US ($ bn) | Middle East share (%) |
|---|---|---|---|
| 1995 | 61.7 | 9.6 | 15.6 |
| 2005 | 292.0 | 44.3 | 15.2 |
| 2008 | 480.7 | 84.2 | 17.5 |
| 2012 | 415.1 | 87.2 | 21.0 |
| 2016 | 156.7 | 27.0 | 17.2 |
| 2020 | 123.9 | 12.3 | 9.9 |
| 2024 | 242.2 | 21.8 | 9.0 |
Visual summary
The first chart shows total US mineral-fuel imports from the Middle East versus total world exports to the US (the mirror of US imports), illustrating the post-2012 decline3.
The second chart plots the Middle Eastern share, highlighting the peak around 2012–2014 and the subsequent drop to roughly 9–11 % in recent years3.
The third chart breaks the Middle East total down by country, confirming Saudi Arabia’s dominance and Iraq’s importance, while Iranian volumes have disappeared from the trade record3.
Caveats
- The data are reported by exporting (Middle Eastern) countries rather than by the US directly, so they reflect partner-country records of shipments to the US.
- The values are in current US dollars, meaning the shares can be affected by oil-price swings as well as by physical-volume changes.
- HS 27 is broader than crude oil alone; it also includes refined products, coal-derived fuels and certain gases. For Middle Eastern suppliers, however, petroleum dominates this category.
- OECD dataset: Balanced international merchandise trade statistics (BIMTS) - HS2017-2D
- Code Run 2Dataset: DSD_BIMTS@DF_BIMTS_HS2017_2D Dataset: DSD_BIMTS@DF_BIMTS_HS2017_2D
Dataset filters for
DSD_BIMTS@DF_BIMTS_HS2017_2DFilter Value(s) REF_AREA W COUNTERPART_AREA USA TRADE_FLOW X FREQ A PRODUCT_HS HS17_27 Dataset filters for
DSD_BIMTS@DF_BIMTS_HS2017_2DFilter Value(s) REF_AREA SAU, IRN, IRQ, KWT, ARE, QAT, OMN, BHR COUNTERPART_AREA USA TRADE_FLOW X FREQ A PRODUCT_HS HS17_27 Program output
Full history: year world_total middle_east_total dependence_pct 1995 61747.160506 9602.412284 15.551180 1996 78850.151047 11120.475969 14.103303 1997 79605.812026 11252.712618 14.135542 1998 58915.572359 8445.342336 14.334652 1999 79528.036717 14245.829807 17.912966 2000 136572.621023 22122.106793 16.198054 2001 120233.174103 19808.454628 16.475033 2002 118897.233113 19497.015702 16.398208 2003 156165.435893 26512.056646 16.976904 2004 207821.425660 32597.411557 15.685299 2005 292018.996401 44251.625772 15.153681 2006 333064.533157 49231.560730 14.781388 2007 363055.824292 54131.894463 14.910075 2008 480735.641137 84243.538925 17.523880 2009 268074.240669 37382.272401 13.944746 2010 345374.905608 49539.848846 14.343789 2011 450438.063589 74856.699893 16.618644 2012 415111.363733 87244.576900 21.017150 2013 376215.915578 76483.825305 20.329769 2014 343514.661449 70447.658550 20.507904 2015 193070.895427 31856.007397 16.499642 2016 156713.339330 27017.249596 17.239917 2017 196740.404555 32922.520913 16.733991 2018 232872.844301 38589.832974 16.571204 2019 200337.040371 22222.491390 11.092553 2020 123947.262319 12287.152990 9.913210 2021 215798.292737 19273.758283 8.931377 2022 314335.363815 34554.559729 10.992896 2023 259777.052565 27111.553127 10.436470 2024 242230.570457 21815.130407 9.005936 Breakdown for key years (billion USD): 1995: country ARE 0.03 BHR 0.01 IRN 0.00 IRQ 0.00 KWT 1.40 OMN 0.15 QAT 0.01 SAU 7.99 2000: country ARE 0.14 BHR 0.02 IRN 0.04 IRQ 5.70 KWT 2.47 OMN 0.03 QAT 0.15 SAU 13.58 2005: country ARE 0.23 BHR 0.15 IRN 0.00 IRQ 10.26 KWT 4.41 OMN 0.41 QAT 0.14 SAU 28.64 2008: country ARE 0.21 BHR 0.05 IRN 0.00 IRQ 23.07 KWT 6.54 OMN 0.70 QAT 0.07 SAU 53.62 2012: country ARE 0.13 BHR 0.18 IRN 0.00 IRQ 19.31 KWT 12.02 OMN 0.36 QAT 0.45 SAU 54.80 2016: country ARE 0.24 BHR 0.11 IRN 0.00 IRQ 5.92 KWT 3.29 OMN 0.47 QAT 0.35 SAU 16.64 2020: country ARE 0.74 BHR 0.06 IRN 0.01 IRQ 3.09 KWT 0.47 OMN 0.01 QAT 0.37 SAU 7.53 2024: country ARE 1.36 BHR 0.20 IRN 0.00 IRQ 7.07 KWT 1.90 OMN 0.09 QAT 0.82 SAU 10.38Code
import pandas as pd world = pd.read_csv(DATASET_FILE0, low_memory=False) countries = pd.read_csv(DATASET_FILE1, low_memory=False) world = world[world['ADJUSTMENT'] == 'B_ADJ_RX'] countries = countries[countries['ADJUSTMENT'] == 'B_ADJ_RX'] world = world[['TIME_PERIOD', 'value']].copy() world.columns = ['year', 'world_total'] world = world.sort_values('year').reset_index(drop=True) me = countries.groupby('TIME_PERIOD')['value'].sum().reset_index() me.columns = ['year', 'middle_east_total'] merged = pd.merge(world, me, on='year', how='outer') merged['dependence_pct'] = 100 * merged['middle_east_total'] / merged['world_total'] print("Full history:") print(merged.to_string(index=False)) # Also show full country breakdown for a few key years print("\n\nBreakdown for key years (billion USD):") countries_clean = countries[['REF_AREA', 'TIME_PERIOD', 'value']].copy() countries_clean.columns = ['country', 'year', 'value'] country_pivot = countries_clean.pivot(index='year', columns='country', values='value').fillna(0) for yr in [1995, 2000, 2005, 2008, 2012, 2016, 2020, 2024]: if yr in country_pivot.index: row = (country_pivot.loc[yr] / 1000).round(2) print(f"\n{yr}:") print(row.to_string()) - Code Run 1Dataset: DSD_BIMTS@DF_BIMTS_HS2017_2D Dataset: DSD_BIMTS@DF_BIMTS_HS2017_2D
Images
us_imports_origin.svgus_dependence_share.svgmiddle_east_by_country.svgDataset filters for
DSD_BIMTS@DF_BIMTS_HS2017_2DFilter Value(s) REF_AREA W COUNTERPART_AREA USA TRADE_FLOW X FREQ A PRODUCT_HS HS17_27 Dataset filters for
DSD_BIMTS@DF_BIMTS_HS2017_2DFilter Value(s) REF_AREA SAU, IRN, IRQ, KWT, ARE, QAT, OMN, BHR COUNTERPART_AREA USA TRADE_FLOW X FREQ A PRODUCT_HS HS17_27 Program output
Merged data (last 15 years): year world_total middle_east_total dependence_pct 15 2010 345374.905608 49539.848846 14.343789 16 2011 450438.063589 74856.699893 16.618644 17 2012 415111.363733 87244.576900 21.017150 18 2013 376215.915578 76483.825305 20.329769 19 2014 343514.661449 70447.658550 20.507904 20 2015 193070.895427 31856.007397 16.499642 21 2016 156713.339330 27017.249596 17.239917 22 2017 196740.404555 32922.520913 16.733991 23 2018 232872.844301 38589.832974 16.571204 24 2019 200337.040371 22222.491390 11.092553 25 2020 123947.262319 12287.152990 9.913210 26 2021 215798.292737 19273.758283 8.931377 27 2022 314335.363815 34554.559729 10.992896 28 2023 259777.052565 27111.553127 10.436470 29 2024 242230.570457 21815.130407 9.005936 Country contributions (last 10 years, million USD): country ARE BHR IRN IRQ KWT OMN QAT SAU year 2015 0.1 0.1 0.0 4.3 4.2 0.0 0.4 22.8 2016 0.2 0.1 0.0 5.9 3.3 0.5 0.4 16.6 2017 0.7 0.2 0.0 10.4 2.7 0.3 0.3 18.4 2018 1.5 0.1 0.0 11.7 1.8 0.0 0.7 22.7 2019 0.8 0.1 0.0 7.1 1.3 0.0 0.6 12.3 2020 0.7 0.1 0.0 3.1 0.5 0.0 0.4 7.5 2021 1.7 0.1 0.0 3.7 1.2 0.2 0.8 11.6 2022 2.0 0.2 0.0 7.5 2.2 0.3 1.2 21.1 2023 1.7 0.1 0.0 8.2 1.9 0.3 1.0 13.7 2024 1.4 0.2 0.0 7.1 1.9 0.1 0.8 10.4 Plots saved.Code
import pandas as pd import matplotlib.pyplot as plt # Load data world = pd.read_csv(DATASET_FILE0, low_memory=False) countries = pd.read_csv(DATASET_FILE1, low_memory=False) # Use balanced adjusted for re-exports consistently world = world[world['ADJUSTMENT'] == 'B_ADJ_RX'] countries = countries[countries['ADJUSTMENT'] == 'B_ADJ_RX'] # Rename columns for clarity world = world[['TIME_PERIOD', 'value']].copy() world.columns = ['year', 'world_total'] world = world.sort_values('year').reset_index(drop=True) # Aggregate middle east countries by year me = countries.groupby('TIME_PERIOD')['value'].sum().reset_index() me.columns = ['year', 'middle_east_total'] # Merge merged = pd.merge(world, me, on='year', how='outer') merged['dependence_pct'] = 100 * merged['middle_east_total'] / merged['world_total'] # Also compute country-level contributions for recent years countries_clean = countries[['REF_AREA', 'TIME_PERIOD', 'value']].copy() countries_clean.columns = ['country', 'year', 'value'] country_pivot = countries_clean.pivot(index='year', columns='country', values='value').fillna(0) print("Merged data (last 15 years):") print(merged.tail(15)) print("\nCountry contributions (last 10 years, million USD):") print((country_pivot.tail(10) / 1000).round(1)) # Plot 1: Total US mineral fuel imports from Middle East vs World (in billion USD) fig, ax1 = plt.subplots(figsize=(10, 6)) ax1.fill_between(merged['year'], merged['middle_east_total'] / 1000, alpha=0.3, label='Middle East exports to US') ax1.plot(merged['year'], merged['world_total'] / 1000, label='World exports to US', color='black', linewidth=2) ax1.plot(merged['year'], merged['middle_east_total'] / 1000, label='Middle East exports to US', color='crimson', linewidth=2) ax1.set_xlabel('Year') ax1.set_ylabel('Billion USD') ax1.set_title('US Mineral Fuel Imports by Origin (Mirror Data)\nHS 27 - Mineral Fuels, Oils and Distillation Products') ax1.legend() ax1.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('us_imports_origin.svg') plt.close() # Plot 2: Dependence share over time fig, ax2 = plt.subplots(figsize=(10, 6)) ax2.plot(merged['year'], merged['dependence_pct'], color='darkblue', linewidth=2.5) ax2.fill_between(merged['year'], merged['dependence_pct'], alpha=0.2, color='darkblue') ax2.set_xlabel('Year') ax2.set_ylabel('Share of US mineral fuel imports (%)') ax2.set_title('US Dependence on Middle Eastern Mineral Fuel Imports\n(Mirror data: Middle East exports to US as % of world exports to US)') ax2.set_ylim(0, max(merged['dependence_pct']) * 1.1) ax2.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('us_dependence_share.svg') plt.close() # Plot 3: Stacked area by country fig, ax3 = plt.subplots(figsize=(10, 6)) countries_ordered = ['SAU', 'IRQ', 'IRN', 'KWT', 'ARE', 'QAT', 'OMN', 'BHR'] # Ensure order plot_data = country_pivot.reindex(columns=[c for c in countries_ordered if c in country_pivot.columns], fill_value=0) ax3.stackplot(plot_data.index, *(plot_data[c] / 1000 for c in plot_data.columns), labels=[{'SAU':'Saudi Arabia','IRQ':'Iraq','IRN':'Iran','KWT':'Kuwait','ARE':'UAE','QAT':'Qatar','OMN':'Oman','BHR':'Bahrain'}[c] for c in plot_data.columns], alpha=0.8) ax3.set_xlabel('Year') ax3.set_ylabel('Billion USD') ax3.set_title('Middle East Mineral Fuel Exports to US by Country') ax3.legend(loc='upper left', reverse=True) ax3.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('middle_east_by_country.svg') plt.close() print("\nPlots saved.")