Hello Airtable!
I guess something is missing in my first post to get replies…
Is my post unclear ?
The answer obvious ? or announced on Airtable roadmap ?
Been answered before multiple times already ?
Any hint would be welcome , thanks!
I encountered the same issue when trying to generate buttons to navigate between pages with a similar set of filters/record pickers.
As you have seen from the URLs, filter values are encoded within the URL directly. The key here is that filters rely on base 64 encoding so that a single parameter value contains both the selected record ID and the filter type it is checked against.
You can use an online converter like this one to convert a record ID into base 64.
In my case, to make things work without having to convert manually every ID, I added an automation when a new record is created in my table which computes the base 64 record ID via a script :
function base64Encode(a, includePadding = true) {
var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
if (!a) return a;
do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e,
f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + (includePadding ? "===".slice(o || 3) : "");
}
let inputConfig = input.config();
output.set('base64ID', base64Encode(inputConfig.recordID, false));
The script is set up to have the created record ID as an input and writes the result in its output which is used to fill a field of the corresponding record in a following action.
After that, I just wrote down the few URLs of my interfaces and replaced record IDs in both their original and base64 encoded forms.
For example, one of my buttons has a URL formula looking like:
IF({Base64 ID}, "https://airtable.com/myapphashname/pageHashName?PICKERID=" & RECORD_ID() & "&FILTERID=b%3ABCDEFGHIJ" & {Base64 ID} & "iXV1dfQ")
This works pretty well in my case without any user input required to set things up.
I encountered the same issue when trying to generate buttons to navigate between pages with a similar set of filters/record pickers.
As you have seen from the URLs, filter values are encoded within the URL directly. The key here is that filters rely on base 64 encoding so that a single parameter value contains both the selected record ID and the filter type it is checked against.
You can use an online converter like this one to convert a record ID into base 64.
In my case, to make things work without having to convert manually every ID, I added an automation when a new record is created in my table which computes the base 64 record ID via a script :
function base64Encode(a, includePadding = true) {
var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
if (!a) return a;
do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e,
f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + (includePadding ? "===".slice(o || 3) : "");
}
let inputConfig = input.config();
output.set('base64ID', base64Encode(inputConfig.recordID, false));
The script is set up to have the created record ID as an input and writes the result in its output which is used to fill a field of the corresponding record in a following action.
After that, I just wrote down the few URLs of my interfaces and replaced record IDs in both their original and base64 encoded forms.
For example, one of my buttons has a URL formula looking like:
IF({Base64 ID}, "https://airtable.com/myapphashname/pageHashName?PICKERID=" & RECORD_ID() & "&FILTERID=b%3ABCDEFGHIJ" & {Base64 ID} & "iXV1dfQ")
This works pretty well in my case without any user input required to set things up.
Thanks Alan, I was getting a bit desperate for a solution and missed the notification of your super detailed answer!
Let me try to implement your suggestion and confirm it works in my context.
@Alan_Transon, You just saved my day!!! Working here. Thanks.
@Alan_TransonThanks for sharing your script - this unlocked a feature I've been trying to implement for days!
I encountered the same issue when trying to generate buttons to navigate between pages with a similar set of filters/record pickers.
As you have seen from the URLs, filter values are encoded within the URL directly. The key here is that filters rely on base 64 encoding so that a single parameter value contains both the selected record ID and the filter type it is checked against.
You can use an online converter like this one to convert a record ID into base 64.
In my case, to make things work without having to convert manually every ID, I added an automation when a new record is created in my table which computes the base 64 record ID via a script :
function base64Encode(a, includePadding = true) {
var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
if (!a) return a;
do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e,
f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + (includePadding ? "===".slice(o || 3) : "");
}
let inputConfig = input.config();
output.set('base64ID', base64Encode(inputConfig.recordID, false));
The script is set up to have the created record ID as an input and writes the result in its output which is used to fill a field of the corresponding record in a following action.
After that, I just wrote down the few URLs of my interfaces and replaced record IDs in both their original and base64 encoded forms.
For example, one of my buttons has a URL formula looking like:
IF({Base64 ID}, "https://airtable.com/myapphashname/pageHashName?PICKERID=" & RECORD_ID() & "&FILTERID=b%3ABCDEFGHIJ" & {Base64 ID} & "iXV1dfQ")
This works pretty well in my case without any user input required to set things up.
Thanks a lot Alan!
Works well for single criteria!
Any idea how to create a url for more complex cases with interface. In particular filters with numerous fields present to some values?
Any idea how this could apply to the "new" List view with drop downs? Even with a single Filed the base 64 id does not appear in the URL

Not sure how all this url magic works.
Any documentation somewhere?
Thanks for your support!