Both teams overcame their share of hurdles to reach this stage but few would argue against them being deserving finalists.
As we count down to this weekend's finale at the Al Janoub Stadium in Qatar, here is a look at how the two sides got this far.
Group stage: Top of Group C (3 wins, 1 draw, 2 losses)
Having reached the final in 2018, Persepolis had a campaign to forget last year as they failed to make it out of the group stage -- and it initially looked as though they were set for more disappointment in 2020.
An opening day defeat to Al Duhail was followed by a 2-2 draw with Sharjah. But as the competition was abruptly halted in March, the forced break allowed the Iranians to regroup ahead of the West Zone's September restart.
They proceeded to grind out back-to-back 1-0 wins and then, with qualification still on the line on the final day of the group stage, produced an emphatic 4-0 rout of Sharjah to seal their progress.
Round of 16: Defeated Al Sadd 1-0
Persepolis' first test of the knockout stage was arguably their toughest as they faced tournament favourites Al Sadd -- coached by ex-Barcelona star Xavi and boasting plenty of firepower in Santi Cazorla, Baghdad Bounedjah and Akram Afif.
But their newfound resilience -- having conceded just once in four previous matches after the restart -- saw them frustrate Al Sadd, before Issa Alekasir netted a dramatic 88th-minute winner.
Quarterfinals: Defeated Pakhtakor 2-0
With newfound momentum, Persepolis looked confident in their tie against Uzbekistan's Pakhtakor and, following a goalless first half, Alekasir continued his prolific form by breaking the deadlock in the 49th minute before netting the sealer six minutes after the hour mark.
However, Alekasir celebrated with a discriminatory gesture directed at Persepolis' Uzbek opponents, earning himself a six-month ban that will put him out of the final.
Semifinals: Defeated Al Nassr 5-3 on penalties after 1-1 draw
Now without their main attacker, questions were raised over who would fill the void Alekasir left in the match against Al Nassr, who seemed poised to capitalise when tournament leading scorer Abderrazak Hamdallah put them ahead in the 36th minute.
It was 22-year-old striker Mehdi Abdi who stepped up with a thumping header to level the scores six minutes later. With neither team able to find a winner, the tie was then decided by the lottery of the penalty shootout.
Another hero emerged for Persepolis in goalkeeper Hamed Lak, who made a smart save to keep out Maicon's fourth attempt for Al Nassr. He paved the way for Ali Shojaei to convert from 12 yards and send the Iranians through to their second-ever ACL final.
Group stage: Top of Group F (5 wins, 1 draw, 0 losses)
After opening their campaign with a 1-1 draw with FC Tokyo, the hiatus in continental competition saw Ulsan turn their attention to the domestic front. In South Korea they twice suffered heartbreak after losing out to Jeonbuk Hyundai Motors in the K League 1 title race as well as the Korea FA Cup.
The ACL's return proved to be the perfect tonic as they racked up five straight wins in the group stage, finishing as the East Zone's most-prolific outfit with 14 goals from six outings.
Round of 16: Defeated Melbourne Victory 3-0
Flying high from their dominant group-stage displays, Ulsan were expected to brush aside an undermanned Melbourne Victory but initially struggled to break their opponents down.
The half-time introduction of Bjorn Johnsen turned out to be pivotal as he handed them the breakthrough in the 65th minute and also added a third with four minutes remaining. His strikes were sandwiched between a neat headed effort from Won Du-jae in what was ultimately a convincing win.
Quarterfinals: Defeated Beijing Guoan 2-0
Standing in Ulsan's way next were Beijing Guoan and many bemoaned the fact that the two teams were meeting in the last eight rather than the semifinals, given both looked the strongest contenders the East Zone had to offer.
And where Johnsen had emerged the match winner in the previous stage, it was Junior Negrao who produced a star turn, converting a penalty in the 21st minute before adding another three minutes before halftime with a 30-yard thunderbolt to send the South Koreans cruising through.
Semifinals: Defeated Vissel Kobe 2-1
Last Sunday, it was down to Ulsan and Vissel Kobe to vie for a place in the final and the former's prospects were handed a real boost before the game when it was confirmed that the opposition would be without injured talisman Andres Iniesta.
Hotaru Yamaguchi handed Vissel the lead with a sweeping strike from just inside the area, but a fortuitous effort from Johnsen -- as he inadvertently diverted Yoon Bit-garam's speculative attempt into the back of the net -- sent the game into extra-time.
After 29 additional minutes, it looked as though a shootout would be required to decide the contest but an error from Vissel goalkeeper Daiya Maekawa handed Ulsan a last-gasp penalty, and it was Junior who kept his cool to fire home and keep alive his team's hopes of a second ACL crown since their maiden title in 2012.