Hey Gareth,
You can do this natively with hidden fields like this(https://community.marketo.com/MarketoArticle?id=kA050000000LH7uCAG). For visible fields you need to use some JS with forms 2 api. This snippet will do that with a parameter called 'Email' and map it to your forms' email field:
<script>
//function to make query parematers into an associative array
function getUrlVars(url) {
var vars = [],
hash;
var hashes = url.slice(url.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
MktoForms2.whenReady( function(form) {
var urlEmail = getUrlVars(location.href)['Email'];//get Email from URL
form.vals( {"Email":urlEmail} );//set value in Email field
})
</script>