Not the most experienced player myself, but between my experience and a few other players, here's the general consensus: Ahri has few hard counters, and hard counters fewer other Champs; even
Karthus can do well if he plays his cards right. It mostly comes down to who has more experience with their champ, and with the specific matchup, outside a few cases. The lists vary from player to player; for example,
Fizz is usually considered hell on earth, but I've never had issues unless he abandons lane and teammates forget how to ward. On the other hand, I have a terrible track record against Lux, though most people said it was an easy lane.
There aren't any guaranteed wins, but a few Champs made every player I spoke to cry if they show up. The general theme is, reliable CC, stacking health, reliable gap closers: if they have two, they're a potential problem.
Irelia has a point-and-click gap closer, a reliable stun, better sustain, higher damage output, and even if Ahri lands a Charm, Irelia's slow becomes a stun. If you can talk your team into okaying this, a smart Ahri will hug tower all game.
Vladimir was THE most-hated opponent before his update, the few times he showed up. Nobody's dealt with him as Ahri since, but he hasn't changed all that much, so I could see it still working. The trick to it is every time Ahri Qs, Vlad Qs back, and his is guaranteed to land and heal him. If you can even partially dodge the Orb, you win the trade. Failing that, heal off minions, since Ahri has to burn mana to heal less, and just Pool whenever you see Charm or an all-in dive.
It seems like it wouldn't be that bad, but nobody I know has had a good experience against Riven. Use the shield to get farm without losing health, bait Ahri close, and if you get the stun off, you'll probably take off half Ahri's health in one go. The advantage Riven has over most Champs who fight similarly is the low Cooldowns and redundant dashes; Fizz's trollpole is worse, but it's not up as much, and eventually he has to consider mana. Again, it's a lane where nobody thought it was the worst, but nobody could remember it going well.
Lulu is one that popped up a few times. Reliable click damage, polymorph, her shield, firing her Q from odd angles, and her Ult both boosting her health and interrupting All-Ins (Ahri wants to Ult close so W doens't miss, but Lulu's Ult is a knockup, so it interrupts dashes) were common complaints. Again, it's not common enough to occur to people, but the few players who fought a good Lulu were annoyed even thinking about it. You'd have to pick abilities carefully due to each one's dual effects, but the potential is there.
Annie
Diana
Cho'Gath
Swain
Talon
Malzahar
Fizz and
Kassadin are all Champs that are commonly, but not universally, listed as counters. Annie has easy stuns, usually builds health, and has more burst, but a good Ahri will bunker down and abuse their range; it usually becomes a farm-and-roam lane, with Ahri only getting kills if Annie drops their guard, or if they're amazing at reading Annie players.
Diana has a terrible time early on, but has her shield, a bit of ranged poke, and can follow-up Jungle ganks well pre-six. After six, she has a reliable dash, a potential second dash if she gets charmed the first time, a lot more damage, and a shield. Usually goes to Diana, but not enough that you can just pick up Diana and expect to win.
Hope you like farming; you have so much health many players won't even bother, and although Ahri outranges you, she has to get close for most of her damage, which means getting into range of Cho-Gath's nastiness; if he lands one ability, he'll land everything, and he usually only has to do it once mid-game. It's not too much of a counter since Ahri can just hang back and farm, then wander off to a less-annoying lane, but she'll be spending as much time out of lane as possible usually, just to avoid you.
Swain is a bit odd, and again not updated for his update; almost everyone I spoke to lists him as a hard counter, but I've never had an issue in all two games I've seen him, probably Free Rotation's fault. CC, a lot of health stacking, and post-six he just has to press R to win trade. The biggest issue is you have to keep Ahri in range, and the delay on your root isn't going to make that easy. One word of advice: don't try to tower dive, I got my most dramatic kills from a Swain trying that, then getting charmed back in when they realize it was a terrible idea.
Talon usually has the advantage overall, but it's still very loseable, especially if you get cocky. You have far more damage, your Q is easier to land than the Orb, your Blink places you behind the target, right where all the skillshots Ahri just fired won't hit (as well as causing
flashbacks), and your Ult makes aiming anything a colossal pain. The issue is, you're melee, Ahri's Q outranges yours, the blink puts you into optimal murder range if Ahri still has Charm, and even if you are invisible, if you're obvious about it, Orb and Charm can still hit. Again, don't tower dive (or try to poke near tower range), four times out of five they will make you look like an idiot.
Played properly, Malzahar is a nasty opponent. Played mediocrely, he's going in someone's crappy montage. If you can land your silence, you win the trade, but you won't land it often. The real nastiness comes from intercepting Charms with your Voidlings, clicking on them for nasty damage, and the fact that unless they drastically change their build, you can just build up Voidlings, flash, click twice (E and Ignite), Ult, and boom, 100-0 with no effort. Ahri fares better than some in this matchup since she has good waveclear and, if their timing is amazing and your passive's down, they can interrupt your Ult; only use the above combo if your passive is up, in case of Charm.
Fizz tends to have issues during early levels; about 80% will die before hitting level 6 in my experience, though a Fizz main I ran into insists if they really try they can outtrade from level 3. Post-6, as the game goes on, they are increasingly able to 100-0, often even while missing some of their combo. If you can't survive in lane, drop it and roam; in my experience Fizz will die once, abandon his lane entirely, and wander off to other lanes who won't see it coming because he went straight to their flank from base without going Mid. If ten out of my last twelve games against Fizz have taught me anything, it's that Fizz's presence somehow makes other lanes stop warding, and he needs exactly four
kills to catch up and force Ahri to play defensively.
Kassadin is yet another case of level 6 reversal; he has a bit of an easier time than, say, AKali, farming, but isn't going to get any kills early. Stack health, wait for 6, and you'll probably win. Post-six the biggest issue you have is predictability; if it's obvious when and where you're going to Ult, good Ahri players can dodge the blast zone and/or Charm in advance, but as long as they can't get in your head, you do more damage, faster, on shorter cooldowns, and although Ahri has a longer poke range, you have a longer kill range.
Akali
Katarina are Champs that are heavily contested, would not reccomend unless you're sure of yourself; Katarina seems to generally be who is better; if Ahri anticipates Shunpos and charms Kats Ult fast, she wins, but if Kat evades poke and baits the Charm, she has better damage. Ahri has range, but Kat has reliability in her damage, it comes down to who's most experienced in the matchup and can get in the other player's head.
Akali used to be considered a counter, and still is to a degree, but first she has to survive. If they survive to level six, A competent Akali will win, and the newest of players will outscale Ahri hard enough to win as the game goes on. If they don't feed horribly in the first five levels. And that's a big if; I have yet to fight an Akali who didn't die at least twice before hitting level six. It is definitely a lane for petty revenge; hate yourself for five or more levels, then spend the rest of the game trying to get revenge.
Finally, a few reminders; with Ahri, there are few hard counters either way; ninety percent of matchups are decided because one player is more experienced with their Champ and/or the lane. If you want to beat Ahri, dodge at range, punish her for getting close, and more than lane ganks, watch out for river and Jungle skirmishes; if a good Ahri player sees a fight nearby, they WILL interrupt and come back with a free kill in the time it takes you to ping MIA. If you get a chance to sneak away, most Ahri players won't follow until they see you; all her damage is delayed, so a bush ambush is usually a death sentence, and Foxfire and Spirit Rush are useless if they don't have sight. Don't worry about winrates; Ahri's is high because she's a good all-around Champ who can come back quick if they adjust their build, farm in a side lane, and play safe; she rarely feeds, so it prevents snowballey Mids from getting out of hand as easily as usual. Don't try to carry against Ahri; they're trying to snowball their team, since Ahri's carry potential is low. If you have substantial missing health, avoid clear lines of fire, if they know about the CharmFlash maneuver, you will not react in time. Build health, Ahri players hate extended stationary fights and don't have the cooldowns for anything beyond diving out and back in. And last but not least, never say we Ahri players never did anything nice for the community. We may be annoying, but we're not Zed players.