91³Ô¹ÏÍø

Watch CBS News

Oil only accounts for half the cost of a gallon of gas. Here's where the rest comes from.

The oil supply shock from the Iran war is directly impacting what Americans pay to fill up their cars, with gasoline prices up an average of roughly 60 cents since hostilities erupted on February 28. But just how much does the cost of oil factor into how much drivers pay to fuel up?

"The price of oil, which is market-determined, is the biggest, movable determiner," of gas prices, Patrick De Haan, a petroleum expert at GasBuddy, told CBS News. 

The U.S., the world's leading crude oil producer, specializes in pumping "light" crude, a high-quality oil that with strong global demand. However, the country's refineries are optimized to process a more viscous type of oil known as "heavy" crude, which is normally imported and then processed in the U.S. That explains why global oil prices may affect what American drivers end up paying at the pump.

Gasoline is derived from crude oil, which is extracted from the earth and brought to a refinery. The finished product is then transported to local terminals through pipelines and stored until tanker trucks come to transport it to local gas stations. 

Gas stations buy fuel at the market price and decide how much to sell it for, factoring in overhead costs and target profit margins. De Haan estimates that stations earn an average of 30 to 35 cents a gallon. 

"When oil prices are actively surging, gas stations generally have a lower margin," he explained, noting the higher costs. "When and if there is relief and oil prices plummet, that's when stations see a widening margin."

As of Friday, the average cost of gasoline in the U.S. was $3.91 a gallon, AAA data . A barrel of Brent crude hovered around $100, up 38% from $73 per barrel just before the Iran war started, according to data from FactSet.

What drives the cost of gas?

According to the EIA, crude oil accounts for 51% of the cost of a gallon of gas, making it the biggest factor in determining prices at the pump.

Refining — the process of breaking down crude oil into different components — accounts for 20% fuel prices. Through refining, crude oil is converted into a range of , including gas, jet fuel and heating oil.

Marketing and distribution, which include the cost of transporting fuel to gas stations around the U.S. and retailers' operating costs, make up another 11% of the total cost of gas.

The final component consists of the state and federal taxes charged for each gallon of gas. The federal tax is 18.4 cents and goes toward highway maintenance and infrastructure, according to the EIA.

State taxes vary, explaining why prices often differ when you cross state lines. The average tax across states is about 34 cents per gallon, although they rise as high as 70.9 cents in California and as low as 9 cents per in Alaska, a recent EIA   shows.

Seasonal shifts

Beyond these factors, the time of year also influences gas prices. From February to late March, for example, states start phasing in summer-blend gasoline.

This blend, created to withstand warm weather, is more expensive to produce. As a result, consumers normally end up paying about 15 cents more per gallon during the summer, according to CBS News Minnesota. Retailers are required to sell the summer fuel from June 1 through September 15.

Demand for gas also starts to ramp up in the spring and summer, partially explaining why prices typically rise as the weather warms up.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });