You will need to write a trigger on the lead object. There is a flag field "isConverted" on lead to decide whether it is converted. Write a trigger on update event of lead. Compare trigger.Old value and trigger.The new value of isConverted flag. Then you can insert objects as you want.
You could also use Flow to copy all the values from the Lead to your custom object, adn then update the Lead to some sort of 'archived' status. It wouldn't truly be converted, but the same general idea. (Or, I suppose once you copy the values, you could use the flow to delete the lead record too - I'd opt for the first option thought, for auditing.)
The app seems like a quick fix. But, if you are set on coding, there's another post here: http://salesforce.stackexchange.com/questions/119465/converting-lead-to-custom-object
All Answers
You will need to write a trigger on the lead object. There is a flag field "isConverted" on lead to decide whether it is converted. Write a trigger on update event of lead. Compare trigger.Old value and trigger.The new value of isConverted flag. Then you can insert objects as you want.
https://certifiedondemand.com/configuring-salesforce-lead-conversion/
http://salesforce.stackexchange.com/questions/119465/converting-lead-to-custom-object