The hosts were slightly the better side in the first half, but were kept at bay a number of times by Dionisis Chiotis.
In the second half the pressure finally told as first Stephan Schrock and then Constant Djakpa put the game beyond the Greeks.
Read how the action unfolded below.
5.31pmHello everyone and thanks for joining me for what is the final round of games in the Europa League. I'm covering the Bundesliga teams today, which means we're with Group F first up for Frankfurt vs. APOEL.
5.34pmThe hosts tonight are already through as group winners, so they have done their bit and might see this as a nice rest evening. APOEL are very unlikely to get through, but first-case for them will be a thumping win.
5.38pmLet's take a look at the teams first, shall we?
5.46pmAPOEL bench: Pardo, Mario Sergio, Vinicius, Manduca, Christian, Aloneftis, Goncalves
5.49pmThat is near enough a full-strength Frankfurt side, then. There are a couple of players on the bench who might otherwise start, including Vaclav Kadlec and Kevin Trapp. In goal there is a start for Felix Wiedwald while Srdan Lakic leads the line tonight.
5.53pmPREDICTION: I can't look beyond the German side for this one. They may have lost their 100% record in their last game, but still should have too much tonight. Let's say 2-0, shall we?
5.57pmThe players are out anad we're nearly ready for kickoff. This one perhaps doesn't mean a great, but it should still be a good game.
1 minKICKOFF: The hosts, in their standard red and black home kit, get us underway.
3 minAPOEL have started well and are keeping the ball neatly at the back. However, they try to get into the attacking third and Morais gives the ball away. Likewise for Frankfurt, that's a poor pass from Russ.
6 minThe crowd are in good voice. Remember, this is the set of fans which 12,000 of travelled to their last away game in Bordeaux. The players on the pitch aren't quite so lively at the moment, and we haven't yet seen a proper chance.
9 minThe away side are very compact off the ball and there are two genuine banks of four. Shrock is the first player to break into the box down the right, but his cross is at first deflected clear then gathered by Chiotis.
12 minArmin Veh looks grumpy, as he usually does. If he manages a smile on the sidelines, his side will know that they have done something right. On the pitch so far they are comfortable, but far from dominant. In fairness to them, they don't need a result here.
15 minIt's fair to say that this is far from thrilling at the moment. Frankfurt are probing but APOEL are defending rigidly and not giving up any space.
16 minCHANCE! It should probably be 1-0. Shrock latches on to a poor pass out of the back, cuts into the box and finds Rosenthal to his left in acres of space. The midfielder slashes his shot over the bar, though.
19 minIt's still Frankfurt with all the possession, but they do need to take the chances like the one they just had if their opponents are defending so tightly. Inui finds Djakpa, who crosses to the far post for Barnetta, but the winger cannot get anything on it and it's out for a goal kick.
22 minCHANCE! Chance for Russ now and it's a frantic bit of defending that keeps him out. The ball bobbles about after a corner and the defender shoots from close range, but a combination of defender and goalkeeper gets it out for another corner.
25 minRuss then has to be alert at the other end to direct a low cross out for a corner after fending off the attentions Sotiriou. It comes in and Wiedwald makes a good claim - his first action of the match so far.
28 minDjakpa is a really good player to watch. He loves to get forward down the left at any opportunity and more often than not his crosses are dangerous. This time, though, there's a slight deflection on his effort which takes it into the arms of Chiotis.
31 minPoor from Shrock there, who has Celozzi overlapping to his right, but instead he cuts inside and his shot is blocked. Inui then drives down the right and sees his low cross well gathered by Chiotis. There has still been just the one really good chance so far.
34 minAPOEL really seem to have no want to get forward. They win the ball back after Rosenthal had committed himself forward, but by the time Charalambides had beaten a couple of players and gained control, the hosts were back behind the ball.
35 minBOOKING: Schrock is the first player booked there for a bundly late challenge. It was clumsy and ugly, but not dangerous. I'm not sure a card was necessary, but one has been given nonetheless.
37 minBOOKING: A bit of an unconvincing punch there from Chiotis from a Celozzi cross from the right. He escapes, but as Frankfurt come again Solomou gets shown the yellow for going in a bit high on Djakpa.
39 minCHANCE! Inui times a run into the box really well and is found by Lakic, but the keeper closes the angle really quickly and in the end it comes back off Inui for a goal kick.
42 minAPOEL have come into it a little bit more in the last few minutes, but haven't had a real chance. Their half is summed up by a shot from range by Charalambides, whose effort from about 30 yards goes about 10 wide.
45 minThere will be just one minute added on at the end of a frankly disappointing half of football. I don't expect either team to score.
45+1 minCHANCE! That's Lakic's first sight of goal, as he meets a Celozzi cross but is too far out to really trouble the keeper. Then a massive chance for Inui, who is in acres in the box to receive a pass but again it's smothered by Chiotis.
6.48pmSo the busiest player in that half was certainly the away keeper Chiotis. He made a couple of really good stops, but aside from that there hasn't been much to talk about. The 0-0 at the break is about right, although the hosts will think they should be ahead.
6.53pmThe way it is going it would appear that Frankfurt will be ahead before too much longer. However, if Chiotis keeps up his form then they might end up needing something special to beat him.
6.58pmI wouldn't expect any changes just yet. Frankfurt are creating a few chances, just not enough. APOEL, well, the game plan is seemingly to be tight and hold out for a draw - which means that it's so far, so good for them.
7.01pmAPOEL SUBS:I was wrong... Vinicius is on at the break for Nuno Morais, with Charalambides making way for Gustavo Manduca. Here come the players.
46 minThe visitors, with their two new players on the pitch, get us back underway for the second half.
49 minNo chances as yet in the second 45, although APOEL have already looked much better. Nice touch from Manduca takes him past Celozzi, but he is then brought down. Good play from the new man.
52 minFrankfurt are just clawing their way back into it now. Djakpa crosses for Lakic, but Guilherme does well to get there first and clear. It comes back out to Rosenthal but his through ball is woeful and is easy for Chiotis.
54 minShot from Lakic, who is clearly getting frustrated with the lack of chances in the box. His shot from around 25 yards skids not too far wide of the far post.
57 minDjakpa almost finds the net, but it would definitely have been a fluke. His cross from quite deep is slightly overhit and for a moment it had Chiotis worried as it flew just past his far post.
60 minThere is a lack of creativity at the moment for the hosts. Plenty of crosses are coming in, but they are largely aimless - there is very little threate from passes through the middle. At the moment, APOEL's centre-backs are dealing with everything.
62 minCLOSE! Djakpa fires into the side netting from an angle after being found by Inui. Meanwhile Kittel comes on for Barnetta for the hosts. They are beginning to push APOEL back now as Lakic gets another chance with his head but only picks out Chiotis.
65 minSAVE! Brilliant stop from Wiedwald! A cross comes in from Manduca on the left, which Vinicius meets with a strong header, but the young keeper is there to tip over the bar. That was comfortably APOEL's best chance.
67 minFinally the deadlock is broken! It's a really good bit of play from Djakpa, who dummied a cross before curling it to the far post where the unmarked Schrock was waiting to head into an empty net. They do deserve to be leading. Meanwhile, Joselu is on for Lakic.
70 minNothin much to report since the goal. APOEL have upped their tempo a little bit and are starting to stretch Frankfurt at the back, but some poor decision making has led to their being no chances as yet.
73 minCelozzi is brought down, and Frankfurt use the opportunity from the kick to retain some possession. APOEL break through Artymatas, but Frankfurt get back really quickly to stifle the space.
76 minFree kick in a dangerous position here now as Schrock is brought down just outside the box. I think Djakpa will fancy this one, who scored a good effort earlier in the group stage.
77 minHe's done it again! It hasn't ended up right in the corner, but Djakpa got it over the wall and under the bar with enough power to beat Chiotis. Manduca was booked just before for what looked to be because he had a ring on, and Bakalorz comes on for Inui.
80 minBOOKING: Christian now goes into the book for taking away the legs of Schrock as he went to cross. That's fair enough.
84 minThe crowd are singing, the players are keeping it tidy at the back. This means that the points are certainly going Frankfurt's way. APOEL didn't look likely to get one back, let alone two. The fact that they needed a thumping win to even have a chance means that they are playing their last few minutes of European football this season.
86 minCHANCE! Bakalorz probably should have made it 3-0, but after being played in by Schrock he could only shoot through the keeper's legs and wide. On first glance it looked like a save, but a goal kick is given.
89 minPlenty of noise from the home fans - they have thoroughly enjoyed this Europa League campaign so far. They have made short work of the group so could still go a bit further yet.
90 minThere will be two extra minutes to play at the end of the game.