How many pokemon did Ash catch? Ash is fairly well known for his catch phrase "Gotta catch em all". 

But recalling the series, it feels as if he did not even manage to catch a quarter of them.

So how many did he manage to catch?
Let's count? I am including pokemon such as Charmander, Chimchar, etc, which joined Ash of their own will without a battle as &quot;CAUGHT&quot;.
List of Ash's Pokemon:
Kanto and Orange Islands

Pikachu - Given. Not caught.
Caterpie - Caught. Released as a Butterfree.
Pidgeotto - Caught. Left in the wild as a Pidgeot
Bulbasaur - Caught.
Charmander - Caught. Joined Ash of his own will. Left to train. Rejoined and with Oak now.
Squirtle - Caught. Released back to the Squirtle Squad.
Krabby- Caught. With Prof. Oak as a Kingler
Raticate - Traded for Butterfree. Got back
Haunter - Joined Ash for fun. Left for Sabrina.
Primeape - Caught. Left for Fighting trainer.
Muk - Caught in the power plant.
Tauros - Caught in Safari Zone.
Lapras - Caught. Released with family.
Snorlax - Caught on Orange Island.

Johto

Heracross - Caught.
Chikorita - Caught. With Oak as a Bayleef
Cyndaquil - Caught. With Oak as a Quilava
Totodile - Caught
Shiny Noctowl - Caught
Beedrill - Caught in Bug Catching Contest. Released to Casey.
Phanpy - Hatched.. With Oak as a Donphan
Larvitar - Hatched. Released

Hoenn and Battle Frontier

Tailow - Caught. With Oak as a Swellow
Treecko - Caught. With Oak as Sceptile
Corphish - Caught
Torkoal - Caught
Snorunt - Caught. With Oak as a Glalie
Aipom - Caught. Traded to Dawn

Sinnoh

Starly - Caught. With Oak as a Staraptor
Turtwig - Caught. With Oak as a Torterra
Chimchar - Caught. With Oak as an Infernape. Left Paul to join Ash, like Charmander
Buizel - Traded. From Dawn
Gligar - Caught. With Oak as a Gliscor
Gible - Caught

Unova

Pidove - Caught. With Oak as a Unfezant
Sewaddle - Caught. With Oak as a Leavanny
Roggenrola - Caught. With Oak as a Boldore
Palpitoad - Caught. With Oak
Scraggy- Hatched. With Oak
Oshawott - Given by Juniper. With Oak
Tepig - Another fire starter left by a trainer. Caught. With Oak as a Pignite.
Snivy - Caught! With Oak
Krokorok - Caught. With Oak as a Krookodile

Kalos

Froakie - Caught. Released. With Squishy and Z2
Fletchling - Caught. With Oak as a Talonflame
Goomy - Caught. Left in the Wetlands
Noibat - Hatched. With Oak as a Noivern
Hawlucha - Caught. With Oak

Alola

Rowlet - Caught! Ash has caught his first pokemon in Alola.
Rockruff - Caught! In Alola as Lycanroc
Litten - Caught! in Alola as Incineroar.
Poipole - Caught! In ultra space. Came back as Naganadel for Pokémon league
Meltan. Caught! In Alola as Melmetal.

Galar

Dragonite - Caught! With Ash in various regions.
Gengar - Caught! With Ash in various regions
Riolu - Hatched! Given to Ash by Nurse Joy.
Farfetch’d - Caught! With Ash in various regions:

Tl;Dr Ash has got 57 unique pokemon species. He got 2 (Pikachu, Oshawott), Traded for 2 (Raticate, Buizel), hatched 5 (Larvitar, Phanpy, Scraggy, Noibat, and Riolu). Also, Haunter just traveled with him so not counted as catching.
Thus Ash has CAUGHT [57-(2+2+5+1) = ]47 unique species.
Edit: As requested by OP removed a quote referencing the number of pokemon dexed by Ash. Dexed pokemon are a larger set of pokemon, which include hatched, evolved, and owned in any other way (Gift/Trade, etc.).
Also, couldn't resist.