United States dependence on Middle Eastern oil imports over time

Model: Kimi K2.6 Checked on:

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

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

2

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

  1. OECD dataset: Balanced international merchandise trade statistics (BIMTS) - HS2017-2D
  2. Dataset filters for DSD_BIMTS@DF_BIMTS_HS2017_2D

    FilterValue(s)
    REF_AREAW
    COUNTERPART_AREAUSA
    TRADE_FLOWX
    FREQA
    PRODUCT_HSHS17_27

    Dataset filters for DSD_BIMTS@DF_BIMTS_HS2017_2D

    FilterValue(s)
    REF_AREASAU, IRN, IRQ, KWT, ARE, QAT, OMN, BHR
    COUNTERPART_AREAUSA
    TRADE_FLOWX
    FREQA
    PRODUCT_HSHS17_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.38
    

    Code

    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())
    
  3. Images

    us_imports_origin.svg
    us_dependence_share.svg
    middle_east_by_country.svg

    Dataset filters for DSD_BIMTS@DF_BIMTS_HS2017_2D

    FilterValue(s)
    REF_AREAW
    COUNTERPART_AREAUSA
    TRADE_FLOWX
    FREQA
    PRODUCT_HSHS17_27

    Dataset filters for DSD_BIMTS@DF_BIMTS_HS2017_2D

    FilterValue(s)
    REF_AREASAU, IRN, IRQ, KWT, ARE, QAT, OMN, BHR
    COUNTERPART_AREAUSA
    TRADE_FLOWX
    FREQA
    PRODUCT_HSHS17_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.")