Airtable Script - "when a record matches conditions" -> How do I get the records that triggered the automation?

I configured an Airtable automation script to trigger when a record matches some conditions.

I had expected to somehow get an “input” containing the said records, but it feels like there isn’t such thing. My goal is to perform processing for the said records only.

I didn’t find anything in the API reference https://airtable.com/developers/scripting/api.

Is it possible? If not, what’s the recommended way to about that? I’m thinking about iterating over all elements and check if some field is empty and if so then perform some processing for that record.

Also, I read that only 15 records can be updated per second, how does this work? Is it handled by Airtable automatically or do I need to temporize the updates myself so that I don’t go over the limit?

If I understood you correctly, you can use input.config() to pull information from Trigger into the script.
You have setup windows to the left of scripting block where you can configure it and than use in your script. Here is example in a script I made some time ago where you can see how its done (there is a lot of unnecessary stuff in the script itself but it was one of the first I made so i was marking and checking each step :D)

Thanks, I tried to use it but when I create an input variable, I’m not able to run the script anymore. :thinking:

The “Test” top-right button gets disabled and I don’t understand what I’m supposed to do.
Removing the input variable fixes it. This is confusing.

Hmm, did you try to re-test trigger step again after adding input.config? You need it to be success for script to be able to run, might be there was some issue there, at least judging buy the message you get
Maybe some of our fellow forum members with more experience at scripting could provide some additional insight.

Did you solve it?
I have the same problem when i use input.config and it says:

(property) config: (options: {
title: string;
description?: string;
items?: ConfigItem;
}) => any
Expected 1 arguments, but got 0.(2554)
9(42, 1): An argument for ‘options’ was not provided.

I hope you can help me…

No, I did not. I did something different which doesn’t use inputs.

Is there a more computationally economical way to do this? I have an automation set up almost exactly the same way as you, but it takes 11s to update a single record, because every time it has to query the entire table (5600+ records) just to get the record that is already identified by the automation trigger, because AFAIK the only way to do this is with await selectRecordsAsync() and then await getRecord(), meaning even though the record should already be known because it tripped the trigger, I have to query ALL records and then essentially filter by the id from the trigger’s input.config()… this is extremely wasteful.

Is there no way to just getRecordbyID() from input.config()[‘record_id_from_trigger’]??

My ideal pseudo-code would be as simple as this, and MUCH faster:

let data = input.config();
let table = base.getTable('Table');
let record = await table.getRecordByID(data.id);
await table.updateRecordAsync(record, {'Field': 'Updated Value'});

or, even more ideal, the whole record object should already be captured by the automation, and accessible through input.config(), not just the id from input.config()so you could do:

let record = input.config().the_actual_record_object;
let table = base.getTable('Table');
await table.updateRecordAsync(record, {'Field': 'Updated Value'});

There is definitely a way to optimize this.

Using the same workflow, you could use filterByFormula to filter the records you want, and this would likely decrease your query time quite a lot, by ignoring all records that don’t match your criteria. (you could filter by ID, in your case)

I actually figured out you can just do: (if you set up a var called ‘id’ in your automation)

const data = input.config;
await table.updateRecordAsync(data.id, { 'Field': 'Updated Value' });

So I would recommend doing that :slight_smile:.