In an even first half, David de Gea and Kevin Trapp were both called into action semi-regularly.
Germany eventually opened the scoring through Timo Werner, who finished Robin Gosens' cutback in typically ruthless fashion. Debutant Ansu Fati thought he grabbed a late equaliser for Spain, only for the assistant referee to deny him his first international goal.
However, La Roja levelled things up in the 95th minute when Gaya latched onto Rodrigo's header to earn Spain a point.
Here's 90min's player ratings on a dramatic night of Nations League action...
1. Goalkeeper & Defenders
Kevin Trapp (GK) - 7/10 - Made a couple of good stops early on. Distribution was occasionally wayward and he seems unlikely to make the number one jersey his own any time soon.
Emre Can (CB) - 5/10 - His clumsy back-pass nearly gifted Spain an opening goal. Looked uncomfortable at centre back throughout.
Antonio Rudiger (CB) - 7/10 - Did very little wrong defensive but was guilty of some laboured build-up play, particularly in the first half.
Niklas Sule (CB) - 8/10 - The pick of his side's back three, Sule was imperious and composed, offering Spain's forwards very little to work with.
2. Wing Backs & Midfielders
Thilo Kehrer (RWB) - 6/10 - Got into some promising positions and had a header well saved. Faded slightly after a strong start.
Ilkay Gundogan (CM) - 6/10 - Outshone by his midfield partner but was solid enough. Will be frustrated to have made a few clumsy errors.
Toni Kroos (CM) - 8/10 - Sprayed a couple of outstanding long passes and dictated the German tempo. As always, the midfield battle between him and Sergio Busquets was fascinating.
Robin Gosens (LWB) - 7/10 - Did not get much joy against the resolute pairing of Jesus Navas and Dani Carvajal in the first half. Improved after the break, providing the assist for Werner's goal. Not bad for his international debut.
Julian Draxler (AM) - 6/10 - Forced De Gea into a fine stop early on but his performance dropped off as the game wore on.
Timo Werner (ST) - 8/10 - A lethal finish from a lethal finisher. In a game of fine margins, his goal so nearly proved decisive. *insert cliche about Chelsea fans liking what they saw here*
Leroy Sané (ST) - 6/10 - Broke free on numerous occasions but was hampered by some poor decision making. Some ring rust was to be expected though after such an extended break from regular competitive football.
Matthias Ginter - 7/10
Suat Serdar - 6/10
Robin Koch - 6/10
5. Goalkeeper & Defenders
David de Gea (GK) - 8/10 - Manchester United's number one made several fantastic stops early on to stem the German tide. If he keeps up this level of performance in the Premier League, United fans will be very happy (and Dean Henderson will be very unhappy).
Dani Carvajal (RB) - 6/10 - Defended well and tried to attack as best he could to little avail. Caught out slightly for Germany's goal.
Sergio Ramos (CB) - 7/10 - Led his side's quest for an equaliser by holding an aggressive high line. Looked extremely relaxed throughout.
Pau Torres (CB) - 7/10 - Some good covering work in the opening exchanges and he also carried the ball out well.
Jose Gaya (LB) - 7/10 - Caused Germany very few problems for much of the game, but that was all forgotten when he grabbed a euphoric equaliser in the dying seconds.
Fabian Ruiz (CM) - 5/10 - Struggled to impose himself on the game. A couple of good late runs into the box might have led to a goal on another day.
Sergio Busquets (CM) - 7/10 - Spurned a chance for a rare goal in the first half, failing to connect with a volley inside the box. Other than that he was neat and tidy.
Thiago Alcantara (CM) - 5/10 - Pretty non-existent. Probably still hungover from the Champions League final. Did some beautiful things with the ball though - as he always does.
Jesus Navas (RW) - 6/10 - Prevented Gosens causing much of a threat down the left but offered very little going forward. Was withdrawn at half time.
Rodrigo (ST) - 7/10 - His assist for the equaliser was overshadowed by occasionally lacklustre decision making and poor finishing. Leeds will be hoping he sharpens things up a tad before the season starts.
Ferran Torres (LW) - 6/10 - Struggled to make any inroads but pressed well. Looks a good fit for Pep Guardiola's system.
Ansu Fati - 6/10
Oscar - 6/10