by formula
You got an error while writing the formula because of the mix between '
and "
. Use instead Template_literals.
It could be
function historic(term) {
var formula = `=index(split(split(IMPORTXML("https://www.coingecko.com/en/coins/${term}/historical_data/usd/","//td[3]")," "),"$"),0,0)`;
return formula;
}
function testHistoric() {
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').setFormula(historic("bitcoin"));
}

You can use coingecko api
Or use this formula
=importhtml("https://www.coingecko.com/en/coins/bitcoin/historical_data/usd","table",1)

edit: by script
If you want to fetch the informations by script and not by formula, try
function testHistoric() {
historic("bitcoin")
}
function historic(term) {
url = `https://www.coingecko.com/en/coins/${term}/historical_data/usd/`;
var html = '<table' + UrlFetchApp.fetch(url, {muteHttpExceptions: true}).getContentText().replace(/(\r\n|\n|\r|\t| )/gm,"").match(/(?<=\<table).*(?=\<\/table)/g) + '</table>';
var trs = [...html.matchAll(/<tr[\s\S\w]+?<\/tr>/g)];
var data = [];
for (var i=0;i<trs.length;i++){
var tds = [...trs[i][0].matchAll(/<(td|th)[\s\S\w]+?<\/(td|th)>/g)];
var prov = [];
for (var j=0;j<tds.length;j++){
donnee=tds[j][0].match(/(?<=\>).*(?=\<\/)/g)[0];
prov.push((donnee));
}
data.push(prov);
}
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
sh.getRange(1,1,data.length,data[0].length).setValues(data)
}