Need development and API help? Ask your questions here!
Recently active
Setup Create a table called “To watch”. Keep the default fields (Name, Notes and Attachments) Get an OMDB API key: http://www.omdbapi.com/apikey.aspx Script Add a scripting block with the following script: // Get an API key from OMDB here: http://www.omdbapi.com/apikey.aspx const OMDB_API_KEY = 'YOUR_API_KEY'; // Shows all the button groups together and waits for a button click // Returns the first button that was clicked async function chooseFromButtonGroups(label, buttonGroups) { output.markdown(`## ${label}`); return await Promise.race(buttonGroups.map(([label, options]) => input.buttonsAsync(label, options) )); } async function addTitle(title) { const info = await fetch(`https://www.omdbapi.com/?t=${title}&apikey=${OMDB_API_KEY}`); const { Title, Runtime, Plot, Poster } = await info.json(); output.markdown(`  # ${Title} ${Plot} Runtime: \`${Runtime}\` `); const table = base.getTable('To watch'); await t
Airtable’s calendar generated ics link does not allow me to control the content of the Description and Location fields in the ics file! I was wondering if some addon exists for AirTable which will give me this ability to add content to the Description and Location fields in the generated ics file? Currently I export 4 fields (Event Title, Start Date, Description, Location) to a csv file, from AT, and then import this csv file to Google Calendars, and then share the ics file link, from google calendar. Google cal supports HTML coding in the Description field which is very nice. The problem I have is the updating of the G Calendar when I make changes in the AT table events. I must empty the GC and then re-import the entire calendar! Slow and tedious. It seems that AT’s ics file and link, will immediately auto update when I make changes in the table. That is what I need. Fantastic! But I also need to control the Description and Location fields in the ics file? Any help will be appreciated
Hi there! I found a minor DX issue in the generated Typescript definitions (which are incredibly cool, by the way). I’ve got a rating field in my base: When writing scripting to update it, I’ve got an await input.buttonsAsync where each item is has a value and label: { label: "⭐⭐⭐⭐", value: 4 }, etc. The selected button goes into a payload object that’s eventually passed to table.updateRecordAsync. The actual script works flawlessly, but there’s a TS error: Type "number" is not assignable to type '0 | 1 | 2 | 3 | 4' I tried to add a type assertion, but apparently the script input isn’t a TS file. I think the fix is as simple as demoting the Rating type to accept numbers instead of a specific set of numbers. Not a big deal, since the error doesn’t affect execution, but I figured I’d flag. Thanks!
Hey, The “ResizeObserver loop limit exceeded” is a completely safe to ignore error. See here. It used to be that the blocks sdk only added a global window on error event listener in development mode so my blocks worked after releasing them. Now it seems to add the event listener in release mode too and displays the “contact developer” message. Can you guys please check for that specific error in your error handler and ignore it? Thanks, Ronen
Hey folks - new here and would definitely appreciate some help. Problem space: I have a table with two columns, column A and column B. Each row of column A has a string, and each string may or may not contain any number of emails. My goal is to extract all the emails (if there are any) from the string in column A and put them in the currently empty corresponding field in column B. Sample Row 1: Column A: “There are a few emails relevant here, and they are jack@gmail.com and ashley@yahoo.com” Column B (if implemented correctly should look like): jack@gmail.com, ashley @yahoo.com In javascript, I know how to implement a basic function using regex to solve this problem: function getEmails(emailString) { var words = emailString.split(" "); for (var i = 0; i < words.length; i += 1) { if (/^.+@.+\..+$/.test(words[i])) { console.log(words[i]); } } } But I’m not quite sure how to implement this using airtable, as I’m getting tripped up on the syntax
Hello everyone! Hopefully I put this post in the right place, but let me know if I should move it to another area. I have been trying to use the community as well as Google to try and find a solution to my problem at work, but don’t know coding well enough (at all really) to put anything together that works. I had an idea that would work out well, but I don’t know if this idea is realistic for the use of a button and scripting. I haven’t been able to find anything similar to it yet. I apologize if I am not including all of the necessary information needed or if parts of this don’t make sense. I will clarify anything that needs to be addressed. If anyone is willing to help out, I would greatly appreciate it!! We have a log that records the materials being used on each specific job. There are multiple material types that we log. Some of these materials we can purchase samples for and the others we need to create in-house samples. For our in-house system we currently are using another bas
Hey everyone - I’ve got a unique use case for a business I’m consulting on, and am curious if Airtable can help me out. Basically I am working for a company that provides product recommendations to its clients. There’s a list of, say, 100 products. Each client is recommended 5-10, and then each client decides 2-3 to purchase. Can I create that entire experience (outlined below) through airtable? Company recommends Customer A a list of 10 products Customer A chooses 5 of them Company handles fulfillment of those 5 products I may not be explaining this well, so please let me know if there’s anything I’m missing!
It looks like free use of Scripting block has been extended another six months! (it was originally going to expire this month.) Will there be a similar extension on free usage of Custom Blocks?
I’m looking for a solution to import competitive SEO data from ahrefs into Airtable, but have no idea on where I would start or how I would go about it. (I should probably be putting this into the consultant forum, yeah?)
Hi I wish that there where som stats on publicly shared views. But in terms of how many views but also downloads. Say I have a shared view with a lot of downloadable content. It would nice to get an idea of what content was downloaded.
Hi, I have read as many related posts as I can find about calling the API and filtering on field that is pulled from another table. I Can’t find a way to correctly form the API call to get the correct records. I have a table Articles that has a field “Customer” which is a “Link to Customer”. Customer has a “Customer Name” which is what is displayed in the Article table, but I also happy to search on the id if I have to. My API Call returns for example. customer: [“recjn4jFUGzYplO2N”] how do I filterByFormula to get only those with this customer. I have tried… filter_string=urllib.parse.quote(“filterByFormula=SEARCH(“recjn4j…lO2N”,ARRAYJOIN(Customer))”) filter_string = urllib.parse.quote(“filterByFormula=SEARCH(“recjn4j…lO2N”, {Customer})”) filter_string = urllib.parse.quote(“filterByFormula=SEARCH(“Customer Name”, {Customer})”) etc. I have everything working using Views and filtering by View on the API call, I simply want to not rely on the Views being setup correctly. An example usin
Hi everyone! My name is Taylor, I’m a new product manager at Airtable working on the Airtable platform. Super excited by all the work the team’s doing, and to work with and learn from everyone here. But first - a new block! Say you’re in a meeting with lots of topics to cover - Topic Timer lets you pick a Base collaborator as a moderator and shows a countdown timer to everyone currently in the base, and then when the timer’s up lets all active contributors vote for whether or not to continue discussing the topic. Click here to join the beta. Once you click that link, the “Topic Timer” block will be available in the list of blocks when you go to install a block. We’d love your feedback – please reply with thoughts and suggestions in this thread! P.S. The source code is available here, so you can remix it if you’re in the custom blocks beta.
I’m accessing the Airtable API using a Python script below: import requests from pprint import pprint from airtable import Airtable base_key = 'BASE_KEY' table_name = 'Events List' api_key = 'API_KEY' airtable = Airtable(base_key, table_name, api_key) pages = airtable.get_iter(maxRecords=3, sort=["Date"]) for page in pages: for record in page: pprint(record) The above successfully retrieves the first 3 records in the table as follows: {'createdTime': '2020-08-15T10:04:49.000Z', 'fields': {'Date': '2020-08-15T19:00:00.000Z', 'Description': 'Lorem ipsum dolor sit amet,', 'ID': 20, 'Title': 'Proin laoreet facilisis cursus', 'URL': 'https://www.example1.com/'}, 'id': 'rec4oT3PiXXXXX9ph'} {'createdTime': '2020-08-15T10:05:50.000Z', 'fields': {'Date': '2020-08-15T20:00:00.000Z', 'Description': 'Pellentesque viverra gravida lectus', 'ID': 21, 'Title': 'Curabitur porttitor vehicula urna',
Hi, would anybody know how to pass the second variable (airtableField) in below function? The third variable (shopifyId) is accepted! The purpose is to return just 1 record. Thanks in advance, Ronald let shopifyId = '2418417139848' checkAirtableId('Orders','Order id',shopifyId) function checkAirtableId(airtableBase,airtableField,shopifyId) { let recordFound = base(airtableBase).select({ filterByFormula: `${airtableField} = ${shopifyId}` }).firstPage(function(err,records) { if(err) { console.log(err); return; } return records[0] }) }
I want to access a airtable table through my app i’m making. I have the community airtable API installed into my project, but setting up the thing is a whole new task. I’m trying to add a new item to the table through the app currently. I don’t think the code is incorrect because I used it off the documentation of airtable visual studio api. Here In all the examples of how to use it, there are these two lines that are needed. readonly string baseId = YOUR_BASE_ID; readonly string appKey = YOUR_APP_KEY; I think i’m putting in the wrong numbers somehow. So I put my api key for my account in the second line and the base id for the specific sheet in the baseId line. Ex. const string baseId = "app********" const string appKey = "key********" If you know anything that would be helpful. Thanks. Edit: If you anymore info or screenshots I can send them. Edit 2: Turns out that it’s actually not my fault. The api is broken I think. https://api.airtable.com/v0/*********/Codes?api_key=*********
I have two tables: database & authorityMatrix . When a new record hits database, it has a field called: cost In the authorityMatrix, I have a table with names, emails, and approvalAmounts. The approvalAmounts are the highest Costs that person can approve. Basically I want to do a lookup on the authorityMatrix, and assign the appropriate approvingAuthority into the database based on the level they can approve. I imagine the evaluation would be something like: where authorityMatrix.approvalAmounts <= database.cost and lowestApprovalAuthority = ‘Yes’ This should insure that the lowest level person has already OK’d it to go up to the next level. If they are the FINAL approval, then I’d want to trigger a field that says Final … but that’s getting more advanced … haven’t though through that logic yet. Any help getting started would be greatly appreciated.
Non developer here. I think different flavors of what I’m trying to do have been asked in this forum, but nothing that’s quite a match. I’ve tried employing what I’ve found in the threads with some variations with no luck so far. What I’m trying to do is populate a blank column titled “Agency Talent” in my Agency table with linked records from my Talent Table. Eventually I want the field to be populated when there’s a match on two criteria (Agency match and skill category {e.g. IT, Operations, Engineering, etc.}), but I figured I would try to make it work on one critiera first to understand what scripting block was doing before adding the next layer of matching. The Agency names are under a column titled “Owner” in that table and are under a column titled “Employer” in the talent table. It seems that I’m not properly defining the "Name (Last,First)id; that is the name of the first column in the Talent table where I want to pull the linked record from. For some troubleshooting I’ve trie
For anyone interested in a powershell interface module for AirTable, here you go… GitHub Zulton/AirTable-Powershell-Interface Contribute to AirTable-Powershell-Interface development by creating an account on GitHub. I am currently working on the readme and examples (I have a ton)
Hi all, Hope someone can help with this. I’d like to create/steal a script that will copy field1 into field2 in the same table They are both same data type (formula number into number field) and the script would run on automation everytime a record enters a view. Any ideas out there? I’m sure it’s simple if you know how. Cheers for your help. Matt
Hey I am working on an app that uses the Airtable API to upload and download data, and I need to roll up a filtered set of records to put that list into a new record field. Essentially I’m looking for a way to enter a field name in the filtering options rather than a static value.
Looking at this issue regarding sending ‘single’ message using scriptiing block which was resolved by @Mike_Pennisi i was wondering if we could also be able to using script block/ Twilio to calculate how much it will cost to send a certain SMS to a number of users? Also a way to get the budget per group or assigned group. And lastly using script block calculate the total cost and and enable/disable the sending according to the actual budget. Has anyone worked on something similar ? or found a hack around this…
Hi airtable team, I am using the current iOS 14 Beta and was wondering whether you are planning on building widgets for the app. I think That would be great. Best regards
Similar to the input field used for the Description block. I’m not a developer, but can smash some available code together. I’m wanting to make something similar to the URL preview block, but instead loads a Long Text input (like Description Block) so that we can view/update a Notes field while still having the record list visible. I could use CellRender to get a non-editable Long Text field to display… but I’d love to be able to update (in the block demo’s, similar to the Todo list block).
Hi, Im trying to build a custom front-end on top of the Airtable base. There will be a number of users that can view and update the data-tables via the front-end. Currently, I only have one API key (which is linked to my account) which is what the front-end uses to connect to the Airtable backend. What’s the best way of creating multi-user support that would be consistent with multi-user setup in Airtable? For instance, if I create/update a record via the API – it lists my user-id as the “creator” (regardless of who actually uses the front-end). Do I have to have each user setup an API key for themselves in AirTable and then store it in their user profile? Is there a cleaner/easier way?
Hey folks, I’m working on a scripting action step for an Automation. It feels like querying the whole table just to search through the records is inefficient. I’m a frequent user of the Airtable API and am very used to simply asking for the record object by its ID. Can I make this simpler? I’m literally only trying to retrieve the field values of records that are linked to the record which triggered the automation. The Automation builder UI doesn’t allow for “looking up” fields from linked records. // Get collaborator email from Client record. let clients_table = base.getTable("Clients"); let queryResult = await clients_table.selectRecordsAsync(); // get all records in Clients table let client_record = queryResult.getRecord(`${inputConfig.client_id}`) // find the one with the client_id from input output.set("am", client_record.getCellValue("Account Manager").email) // Get Site record linked to the Project record let projects_table = base.getTable("Projects"); let projectQueryResult =
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.