The eighth-ranked Argentine beat the Swiss 6-4 5-7 (8-10) 7-6 (7-2) in a thrilling encounter.
Federer had been searching for a record sixth title in California, but it was Del Potro who powered to his first ATP Masters 1000 title.
He is the first player to beat Federer in 2018.
Del Potro saved three match points before closing out victory in two hours 42 minutes.
The 29-year-old has been hampered by wrist problems in recent years and has had three operations which left him struggling to use his backhand.
But he has made a strong start to 2018, winning his first ATP 500 title for five years at Acapulco earlier in March and returning to the world's top 10.
Read More (...)