1/21/2025 – BuiltOnAir Live Podcast Full Show – S21-E03
Duration: 0 minutes
Be Sure to Subscribe to the podcast!
To get all the latest videos and demonstrations from the BuiltOnAir Podcast, subscribe and get notified on our Youtube channel here and our newsletter/community here.
FULL EPISODE VIDEO
Watch the full video of the show. See below for segment details.
The BuiltOnAir Podcast is Sponsored by On2Air – Integrations and App extensions to run your business operations in Airtable.
In This Episode
Welcome to the BuiltOnAir Podcast, the live show. The BuiltOnAir Podcast is a live weekly show highlighting everything happening in the Airtable world.
Check us out at BuiltOnAir.com. Join our community, join our Slack Channel, and meet your fellow Airtable fans.
Kamille Parks – I am an Airtable Community Forums Leader and the developer behind the custom Airtable app “Scheduler”, one of the winning projects in the Airtable Custom Blocks Contest now widely available on the Marketplace. I focus on building simple scripts, automations, and custom apps for Airtable that streamline data entry and everyday workflows.
Dan Fellars – I am the Founder of Openside, On2Air, and BuiltOnAir. I love automation and software. When not coding the next feature of On2Air, I love spending time with my wife and kids and golfing.
Show Segments
Round The Bases – 00:01:40 –
Meet the Creators – 00:01:40 –
Meet Okeowo Aderemi from PDF Generator.
With 10+ years of experience in fullstack development and a strong background in core JavaScript and the DOM API, I am a senior fullstack engineer who delivers high-quality web applications and solutions for enterprise and e-commerce clients. I love to work on side projects during my spare time.
An App a Day – 00:01:41 –
Watch as we install, explore, and showcase the PDF Generator App from the Airtable Marketplace. The app is described as “Okeowo will be sharing a sample of how you can generate a PDF copy formatted with your Data in the airtable record”.
Audience Questions – 00:01:42 –
Kamille Parks answers the Airtable question: “When to move a table to a new base and sync it back?”
Full Segment Details
Segment: Round The Bases
Start Time: 00:01:40
Roundup of what’s happening in the Airtable communities – Airtable, BuiltOnAir, Reddit, Facebook, YouTube, and Twitter.
Segment: Meet the Creators
Start Time: 00:01:40
Okeowo Aderemi – Airtable Developer
Meet Okeowo Aderemi from PDF Generator.
With 10+ years of experience in fullstack development and a strong background in core JavaScript and the DOM API, I am a senior fullstack engineer who delivers high-quality web applications and solutions for enterprise and e-commerce clients. I love to work on side projects during my spare time.
Segment: An App a Day
Start Time: 00:01:41
Airtable App Showcase – PDF Generator – Okeowo will be sharing a sample of how you can generate a PDF copy formatted with your Data in the airtable record
Watch as we install, explore, and showcase the PDF Generator App from the Airtable Marketplace. The app is described as “Okeowo will be sharing a sample of how you can generate a PDF copy formatted with your Data in the airtable record”.
Segment: Audience Questions
Start Time: 00:01:42
Airtable Question – When to move a table to a new base and sync it back?
Kamille Parks answers the Airtable question: “When to move a table to a new base and sync it back?”
Full Transcription
The full transcription for the show can be found here:
[00:00:00] Intro: Welcome to the Built On Air podcast, the variety show for all things Airtable. In each episode, we cover four different segments. It's always fresh and different and lots of fun while you get the insider info on all things Airtable. Our hosts and guests are some of the most senior experts in the Airtable community. [00:00:26] Join us live each week on our YouTube channel every Tuesday at 11am Eastern and join our active community at BuiltOnAir. com. Before we begin, a word from our sponsor, On2Air. com. backups. Onto where backups provides automated air table backups to your cloud storage for secure and reliable data protection, prevent data loss and set up a secure air table backup system with onto air backups at onto air dot com. [00:00:50] As one customer, Sarah said, having automated air table backups has freed up hours of my time every other week. And the fear of losing anything. Long time customer [00:01:00] David states, OntoAir Backups might be the most critical piece of the puzzle to guard against unforeseeable disaster. It's easy to set up, and it just works. [00:01:08] Join Sarah, David, and hundreds more Airtable users like you to protect your Airtable data with OntoAir Backups. Sign up today with promo code BUILTONAIR for a 10 percent discount. Check them out at ontoair. com. And now let's check out today's episode, and see what we built on air. [00:01:37] INTRO - 00:01:37 [00:01:37] Dan Fellars: Welcome back. We are in episode three of season 21 of the built on air podcast. Good to be with you myself, Dan Fellers and Camille parks back as always. Uh, Ali Alosa couldn't make it today, but we've got a guest with us, Remy. Welcome Remy. I good to have you on the show. We're going to learn more about Remy and his story. [00:01:59] Later [00:02:00] in the show, but, uh, I'll kick us off on what we're going to be talking about today. Podcast is typically an hour long. We always start with our around the bases to get you up to date on all the news and updates and what people are talking about. Then we'll give a shout out to our sponsor onto where and onto our backups. [00:02:18] And then we'll learn more about Remy and his story and how he came into this world of air table. And then he's then going to showcase a product that he built. That generates PDFs from HTML templates and your Airtable data, and then we'll talk about how you can join our community. And finally, Camille is going to walk us through an audience question on moving tables to a new base, syncing them back, and best practices around that. [00:02:49] ROUND THE BASES [00:02:50] So with that start with around the bases always like to see what new features the air table is released and They don't always keep [00:03:00] this updated We're talking before the show that there's some things missing on here that we have pointed out in previous weeks but here's one that That was posted here, and I don't believe anybody spotted it. [00:03:10] So who's our regulars that find everything? [00:03:15] Kamille Parks: It's, it's Ben and Russell, Russell Bishop and Ben Bailey, I believe. [00:03:19] Dan Fellars: Okay, so Ben and Russell, you were slacking on this one. So every table posted. Um, so this is a, a multi field sorting. So in the past, in interfaces. You could only sort by one field, and now they've added it to where you could have kind of your standard multi field sorting. [00:03:41] You can change the orders of priorities in that front, so. [00:03:47] Kamille Parks: Yeah, so this is for end user sorting, and I guess they're on a sort of sorting, Kick because last year they added the sort records automation step and then [00:04:00] earlier this year. I mean, it's January a few weeks ago. Um, they added sorting, uh, roll ups and look up, uh, values by other fields. [00:04:10] And then now interfaces you can have end user sorting be comparable to those other 2 solutions and sorting throughout the product. So I think they're trying to close the gap on the product. What's missing when you want to sort something. [00:04:26] Dan Fellars: So nice little new functionality there that is available to the front end of interfaces. [00:04:34] Um, I think that's all new there. Okay. Moving on. Okay. This is a pretty cool. So for the AI fans, Um, if you use cloud AI, um, and I think this is kind of becoming the standard that we'll talk about, but basically, um, this was new to me. There's a new protocol model context protocol, which is a basically the ability for your AI.[00:05:00] [00:05:00] Engine, Cloud, ChatGTP, to be able to communicate with different apps. And that's the protocol that they talk to each other. And so now you can, inside of like your chat experience, you can tell it, save this data to my Airtable base. And you see here kind of a live demo. He's asking it to, uh, To do that, and then it's showing that it's updating directly into Airtable, um, from Claude. [00:05:29] So, that's pretty cool. [00:05:35] Kamille Parks: I wonder how much of this is automated in terms of, surely Claude would have to know. Uh, some personal access token to get into your air table account. Um, I don't think those can be dynamically generated. Um, or modifying what access the base, uh, what bases that token has access to. I think that has to be manually set up. [00:05:58] But [00:06:00] once you do that, you know, I wonder if it, if it knows air tables, metadata API on top of just its regular update records and whatnot, API, [00:06:11] Dan Fellars: my guess is that, that, that protocol exposes, you know, what the API is and how you communicate with that end point. Um, and then here you see, it's generating the, the Jason that then gets sent to the end point. [00:06:27] So, but it does. I know chat GPT. I've used it to generate, um, API data and it was aware of the air table meta format and everything. Um, what the Jason request needed to look like. So I think they are aware apparently. So that's kind of cool. So yeah, they're kind of making. Your chat client be your front end to your, to your work, uh, nations.[00:07:00] [00:07:00] It'd be interesting. Yeah, we'll see how that, uh, develops. If this is how you work, I'd be curious to hear from you. Let us know in the comments, if this is something that you've set up. Yeah. Next one. Oh, Jimmy Daly. He actually was on our show, um, CEO of a product called super path. It's a community of. [00:07:25] Marketers, um, and he relies heavily on Airtable to, to run his community and his company. And, um, but this is an interesting article. He's talking about like the, the, the burnout of no code, um, and relying too much on no code and kind of the complexities that, that it adds and the technical debt, um, over time. [00:07:51] So as you begin, that's pretty minimal. And so your happiness increases. But then it starts to get complex and you've [00:08:00] got all these hidden things running and you have to add more layers on top of it to get everything working. Um, but then it looks like it comes back to happiness. Let's say troubleshooting, so you gotta troubleshoot and get back to happiness. [00:08:17] And then your technical debt continues to increase over time. Interesting observation. [00:08:26] Kamille Parks: Yeah, tech debt is no joke. Um And you'll of course have it with a custom built solution as well, but there are, uh, guardrails that are in place when you are working with no code and low code software where, because you don't really design the, um, I don't want to use the word interface because Airtable has a specific. [00:08:48] You know, product called interfaces, but you don't design every little piece of the UI. If something about that UI is not working for your stakeholders or for you, if the product is for you, [00:09:00] you're kind of stuck. There's not really much you can do without having like a Chrome extension, modify the CSS of the page, and then, then what are you doing? [00:09:09] Seems, you know, um, there's, there's Use cases and scenarios where low code and no code tools work great for exactly what you need. And then there might be one little thing that you wish you could change. And, uh, sometimes depending on what platform you're on, you're kind of stuck. [00:09:31] Dan Fellars: Yeah, that's what, that's what, um, sometimes like the simplicity to get started then turns into complexity because you got to kind of come up with these workarounds in the no code world to, to compensate for those things missing. [00:09:48] That's kind of this Kyle mentions that it gets super complicated, super quick. That's the main challenge. Uh, people buy a blueprint and learn how to solve a specific problem. [00:10:00] Um, but that knowledge doesn't transfer. Um, but one of the great benefits is how easy you can get up and running quickly and, uh, overcome the initial hurdles that you're trying to tackle. [00:10:14] So the double edged sword, there's, there's benefits to it, but there, but this technical debt is real. Um, it's something that. That needs to be managed over time. So interesting observation and Jimmy is not, uh, if I remember correctly, is not a developer. He comes more from the marketing background, so he's not trying to sell, you know, development services or anything like that. [00:10:41] He's just sharing his real life experience being in this world. Okay. And if you want to learn more about Jimmy, how he's got set up, check out our previous episode that he joined. It was a couple of years ago. Uh, if I remember correctly. Next [00:11:00] one. Okay. Here's a life hack. This, I didn't think about this. Put your lead magnets in Airtable interfaces and get a 10 credit for every free account sign up. [00:11:10] So basically you could set your lead magnets to, um, join your interface means they have to, uh, they have to have a login to air table and I guess it gets credited to you if they, well, going through an interface that like a form of an interface form that requires the user. [00:11:33] Kamille Parks: Huh? [00:11:34] Dan Fellars: No, that's brilliant. [00:11:36] Kamille Parks: Yeah. [00:11:38] Dan Fellars: Yeah. That's interesting. Apparently it's worked for this guy. He's got over 4, 000 in credit. [00:11:48] There's a little hack for you. We've got a lead funnel. [00:11:55] Okay. Next one. This is a good reminder. Do AI credits roll [00:12:00] over? Yes or no? No. They do not. AI credits do not roll over. Um, so, yeah, that's a good reminder. If you're wondering about credits one for the show, Scott shows this picture of dates and times being cut off in different places. So if you notice the first one, it gets cut off. [00:12:31] It shows the full dates, but it cuts off the time. Where's this one cuts off the date and shows the full time. All right. And the same interface. So [00:12:41] Kamille Parks: if I'm reading this correctly, what it probably is, is, um, like they have a flex box or something where the date and the time are two separate HTML elements. [00:12:56] And both of them have the like ellipses rule set on [00:13:00] so that they don't. Or aren't wider than they, they need be, I don't see why it couldn't just be one text string with a space separating the date and the time. And, um, in, in this particular place where we're seeing it on that kind of the record review layout, those fields are stacked, uh, vertically rather than horizontally. [00:13:22] So there should be nothing to the right of the date. Why does it have the ellipses rule on it at all? [00:13:29] Dan Fellars: Right. Yeah, there's the real estate there to show it. It should show it. So maybe we [00:13:38] Kamille Parks: should edit the CSS of Airtable now that I'm, now that I have an example. [00:13:45] Dan Fellars: Yeah. So I believe Scott, yeah, submitted it to them. [00:13:49] See, see if they take a look, but it is kind of funny how that works. Okay, last one we're going to talk about. Uh, this is a [00:14:00] third party app on top of our table called no loco. It's kind of cool to see, um, third party products. This one is adopting AI more and now they have, um, AI columns in their tables, similar to the AI fields, um, in air table. [00:14:19] But now this one runs at the no loco layer. And so you can kind of refresh it and work with it different than how the Airtable layer works. So [00:14:30] Kamille Parks: yeah, if [00:14:31] Dan Fellars: you're no local user, you can check out this new functionality. Oh, that's interesting. Yep. So cool. That concludes our, uh, our around the bases and everything going on relatively quiet week. [00:14:49] Maybe we've got some, some updates coming from air table here in the next couple of weeks. So we'll, we'll keep you posted on that. Um, if we miss anything, let us know and we'll be sure to [00:15:00] talk about it next week. [00:15:01] ON2AIR BACKUPS - AIRTABLE BACKUPS [00:15:03] With that, if you are running your business on Airtable, it's best practice to make sure your data is stored outside of Airtable and not relying completely. [00:15:12] That's where OntoAir comes in. Our backup solution will back up your data to Box, Dropbox, Google Drive, or OneNote as well. It includes your, your data, um, your attachments, as well as your meta information. And you can rest assured that your data is stored and backed up and you can restore it as well. So check it out. [00:15:34] Entware. com use promo code built on air to get a discount and make sure you can sleep. Soundly at night, knowing your data is backed up outside the virtual with that. [00:15:47] MEET THE CREATORS [00:15:49] Remy, [00:15:50] Okeowo Aderemi: nice to meet you. Let me make it nice to be grateful. I'm so happy to be here. Thanks so much. Thanks, Dan. Thanks, Camille. [00:15:57] Dan Fellars: Well, why don't you tell us a little bit about yourself? [00:15:59] [00:16:00] What's your, what's your background? What's your context? And then tell us your story, how you came into find air table and, and what you're up to. [00:16:08] Okeowo Aderemi: All right. So my name is Okewadi Remy and originally I'm from Nigeria. And my background has always been software engineering. So I kind of play multiple backgrounds because I have like professional background where I've worked with different companies, both both foreign and local, and most of them comes from fintech security and a lot of business and business solutions like payment gateways and products. [00:16:33] Then the part that which I enjoy is my freelance identity. So other than work. My freelance identity allows me to explore because at some point I just got tired, you know, doing product application like full time work. I just wanted to do something different. So I said, let me embrace the freelance lifestyle. [00:16:51] And from there, that's where I go into chrome extension. So I used to build a lot of chrome extensions and I wanted something to store these details in. And, you know, a [00:17:00] friend of mine told me about Airtable. At first, I wasn't really sure what a table was. I just assumed it was some form of, uh, I thought it was like Excel. [00:17:07] Then it kind of felt like a database that you could write scripts, you could do automations, you could do third party integration. And I was like, wow, this is, this is like really nice. And I wanted to experiment with the idea of could I create a custom application? Initially, I was a bit worried, like, what is the technical requirements? [00:17:26] Until I realized that it's existing technologies that we already use, like React. JavaScript and the rest. Yeah, [00:17:34] Dan Fellars: cool. So you and now are you full time freelancer? Are you still working and then freelancing on the side? [00:17:42] Okeowo Aderemi: So I'm still working, but I still freelance on the side. But I'm trying to raise up an agency where. [00:17:48] What we'll do is, uh, do a bit of integration. So I've looked at specific platforms because I look at platforms. I feel like a niche where, like, because right now we're [00:18:00] in the era of no code. There are a lot of things no code can't do. Where, for instance, now with Airtable, there's a lot of things you could do. [00:18:06] I see it like a affordable workflow type of platform where you could customize certain workflows, especially with third party applications like Slack and so. So. Yes, I'm looking to integrate that as freelance. Gotcha. [00:18:22] Dan Fellars: Okay. What's your, what's your favorite feature or functionality of Airtable? It's, I [00:18:29] Okeowo Aderemi: would say my favorite functionality is scripting. [00:18:32] Scripting. Why? The reason why it's my favorite functionality is that With the data, I can do a lot of things because, you know, with Airtable features, there's some things I'm limited to. In automation, there's a lot of things I can't do. But with scripting, I can talk to, I'll give you an example now. I could decide to use Airtable as my product to, for Shopify to add product items, like put them there and everything. [00:18:54] Then I have a script, I have an automation that runs a script at every specific period. It will [00:19:00] handle the data, send it to Shopify, send it to WooCommerce, send it to Magento and the rest. So. And the reason why I favor scripting over extension development is because extension development is a lot of work, but scripting is, you get in and you can do what you want to do. [00:19:16] Dan Fellars: What, uh, what do you think is missing? What would you love to see added to Airtable? So [00:19:22] Okeowo Aderemi: for me personally, what I would love to see is, um, I think there's, um, in extension. So what I would love to see is, uh, I, I would guess. Some form of easy AI integration, because when it comes to AI integration, I'm still not sure how much you could use it in terms of scripting. [00:19:41] If there's something you could do, like use a table, if there's an API exposed in scripting that allows you to, on the data, make some AI calls in order to process some things, get it back and, you know. So that's what I'm not sure. I wish I was something easier. So, [00:19:55] Kamille Parks: yeah. [00:19:57] Dan Fellars: Yeah. Can you, [00:20:00] from a script, there's no way to like refresh the AI field. [00:20:04] I don't believe. [00:20:05] Kamille Parks: I, I don't think so. I mean, I think I could be wrong, but if you have an AI field and it knows there's another field dependency, if you update the other field, it will refresh itself. But, um, it's kind of like a running theme and in air table every time they make. a particular field more advanced, that new advanced feature is not available in the metadata API for quite some time, if at all. [00:20:33] So, you know, despite the AI being a field, there's not much you can do with it from a scripting perspective. You kind of have to adjust other fields first, and then Airtable will do something with that. [00:20:48] Dan Fellars: Yeah, that, yeah, that could be useful if you could just tie directly into and they, and they would benefit because you'd be using your AI credits. [00:20:59] That would be interesting [00:21:00] if the script could just easily make the AI call for you. [00:21:05] Okeowo Aderemi: It would be nice to [00:21:06] Dan Fellars: if [00:21:07] Okeowo Aderemi: there's something to check your credits before making calls so that, so the automations don't just break. Yeah, especially if they auto [00:21:17] Dan Fellars: read it. [00:21:19] Kamille Parks: Well, yeah, that's another thing. Um, there are some pieces of, again, metadata that's just not really exposed. [00:21:28] So, you can very easily pull Give me this user, give me all of the bases they have access to, um, you know, give me their profile picture, but I don't think you can pull what their credits are, so you can't set up an automated workflow that says, okay, warn me when I only have 1000 credits left or something. [00:21:51] Dan Fellars: Yeah, that would be useful. Cool. All right. Well, why don't we jump into what you've got going on? If you want to share your screen, let me, [00:22:00] okay, gone here. [00:22:02] AN APP A DAY - PDF GENERATOR [00:22:04] So let me, let me tee you up. We're going to talk about how to generate PDFs. [00:22:10] Okeowo Aderemi: Okay. So before the screen comes up, I'll first show you what the UI looks like. [00:22:15] Then I will spend some time on the code because I'm assuming a lot of people are That have some third party ideas or something and have to be the market is want to know what it looks like to actually build the product. I'll spend some time there. Then we'll look at the, um, the PDF generator. [00:22:34] Dan Fellars: Yeah. If you want to get your screen ready. Okay. The screen is, my screen is ready. Oh, it's still showing the other screen. [00:22:45] Okeowo Aderemi: Oh, okay. Can you see my table now? [00:22:47] Dan Fellars: Yeah, now I can. [00:22:49] Okeowo Aderemi: All right. So, so this is the air table base. So what I did was I took an existing base, uh, from an air table. Like demo, because I didn't want to populate the data [00:23:00] and now let me explain the relationship. [00:23:02] So what this is, is like art galleries. So you have some names, attachment, bio and field price. Now, one of the things you notice is that there is something called the collection. [00:23:14] Kamille Parks: Yeah. [00:23:14] Okeowo Aderemi: So there is a list of collection. Now, the reason why this is important to notice, because in this script, there is a, there is a lookup that based on the data, when it tries to, you know, in Traditional database, you have a kind of like relation where you have this data and you use a key to pull another data. [00:23:33] So the code also does that, but I will explain the interface. So in this interface, it allows you to pick a table which you want to generate into a PDF. And once you do that, if I click on artist, it generates all the items in the table. So there's a code I've written to generate everything as like a JSON, right? [00:23:57] Then if you click on a [00:24:00] specific one, there is the costal API. So what that means is it gives you access to the selected record. So if you notice as once I click here, you can see it changes to map code. And now for the interface. Initially when I did the interface, it wasn't beautiful, so I was thinking like a program. [00:24:17] I just write the code, just do the UI onto, I had to look at some, you know, existing marketplace app. Now, under the settings. Now, when you're building an app for, uh, editable extensions, there are a lot of things you can make assumptions. Like, for instance, now you want to generate a PDF. I know that I love solutions out there, but I thought, like, what would be a nice thing to do whereby you can make it open. [00:24:43] So you have what you call like your global properties, right? You can set information as you want, and you can see I've set the logo. Company logo. Now you have the HTML. Now this HTML is what it's going to use as the basis for the um, PDF. [00:25:00] And what it does is that it has a template in it has a template because we use a, the PF generator, API, and they have this template in language where you can pass in data. [00:25:10] Now this data are being referenced from your a table bees. So what it, so what the extension would do is we'll take your bees, extract it. to data, then it would merge it with this existing global data. So that that way, all your data is exposed to this HTML. Then there is the API key in case you buy a key and you want to change, you put your key here. [00:25:34] Now I would say for around the spot here, a lot of this I had to do was I had to look at, um, there is the sentence API that allows you to store sentence. So I used it to store like API key. I used to store like HTML and also. This properties. And if we take a look into the code now, this is the part that might be. [00:25:53] I don't know if you can see my screen. Okay. Is it takes too small or you want me to increase it? [00:26:00] It looks good to me. Yeah. Okay. So now I did about. So initially when I first started with creating an app on a table, I needed to understand some terminologies because a lot of things I didn't understand. I didn't understand watchable, loadable, cursors. [00:26:17] record because you know, I come from a traditional database background like SQL. So coming here, a lot of things are different. There is the base. If you have a relationship, it's called a lookup or multi lookup. Then the thing about the ethical documentation is. There are different things you need to understand. [00:26:33] You need to understand the base. You need to understand the record. You need to understand, uh, so a base, like your database, the record is like the role. Therefore, each of the role, it consists of fields. Now, each of these fields, if you have a number, each of these fields, if you check the documentation, there's a specific API. [00:26:50] So it shows you the structure of what they can accept for when you're reading and what data you're supposed to pass for when you're writing. So this makes it easy for you to take data from third [00:27:00] party source and write it to your table. And when you're writing it to your table, you have to actually follow that, um, you have to actually follow that schema. [00:27:06] So the application first starts with, uh, for the block API, you have to obviously put your base ID and the block ID, which you get from your developer setting. Then you have your normal React write. So if you can see it, you would see, um, HTML code props. Now, all this, uh, a reference to the UI. So this code basically like switches the tab, which is around here. [00:27:32] So when you switch tab, it knows what UI to render. But I will go to the main part because I wouldn't want to just, I'll go to the main part. So this here just returns the UI. But the main part that I would say is very interesting is, um, if you look their first two, their first three parts. This is the part that, um, is a party that retrieves the API because we're making a third party API call. [00:27:56] Then there's also another part that makes the API call, and I would [00:28:00] scroll to the bottom. So now, what makes this part a bit interesting is because you know when you build a, um, A table script in our extensions. Sometimes there are things that might be limited in the Airtable platform. So you want to do something outside. [00:28:17] You could have an API to do something extra. So with this, this allows you to make calls to third party APIs. So what this does is, uh, it takes all the data from the table. Then there is a code that takes all the data, that does some ugly stuff, and I'll take it there. But I'll tell you, if you look at this, this just says the API code. [00:28:37] Now, the part that is really interesting to me is, um, once you select a table and I'll take you there is around [00:28:50] coming in payload reports. So once you take a table, what it does is that all the fields that are [00:29:00] selected, the records as I said, I did this one. This would, this will, uh, this will make a call to your. Um, Pi to pick all the tables, then put in there. Then when you select a record, there is one that does a lookup and let me look for it. [00:29:16] Sorry. Uh, let's see. Lemme type lookup. Yes, this is it here. So I'll go to the top here. So once you get the data right, remember I said that, um, for lookup data, right? To get related data, like, um. For instance, now, like when you click here, like for this here that connects to this base here in the metadata, initially, there is nothing like this in the documentation because I was checking. [00:29:51] So in the metadata, I had to really like dump the, uh, the metadata for the field, then try to find the [00:30:00] relationship because now once you pick each of the records, it finds the record. This is the, uh, the field type is what I use to know what type it is. And in the documentation, there are multiple types of fields. [00:30:11] So once I know that it's a lookup here for the lookup fields, what I would do is, uh, try to find the, try to look for the metadata that references the lookup field. There is somewhere in the field that has, uh, a reference to it and also the value. So based on that, so you can see based on this, I'm saying that I'm looking at the lookup field for each of them. [00:30:32] I'm looking for this, um, the name here, then from here I get the value. Then once I get the value, I now, I now merge it with the record. So it's almost like if you are using SQL, it's almost like an inner join, where you get two datas here and here and you join them together. So that's what I did. So once I joined them together, I now pass it as a data, then pass it to the templates, I mean to the API. [00:30:56] So that the API would reference everything in the template. And I'm going to [00:31:00] release this, uh, because I did this for practice. I'm just gonna release this, uh, to a GitHub link and make it public. But if you now look at the, um, template. Now the point thing about this template is what I was generating the template. [00:31:11] Uh, the initial template was ugly and that was before, 'cause I did this a while. Then I realized that there's chart GPT. So I used chart GPT to, I added the ugly template with all the, um, schemas being referenced from the table. So I asked Chatschip to generate the lovely templates using Tailwind and once it came, I just saved it here. [00:31:35] Then if we go to our artists now and we click on like Batman, this and this, all you have to pick is the name, the bio and the price. So once you go back to imputes and you click on render, it calls the API. And once it calls the API, you get, you get a PDF version. So you also see the PDF version[00:32:00] [00:32:01] so you can see it gets the Batman, the description, the price. is that I'm using a free API key. So, so you can, so you, so you can generate like, um, an invoice or something, or you can generate maybe like some daily reports and all you just need to do is configure the templates and make a reference to your data and the data is extracted and merged and you get your. [00:32:30] Yeah, you got your pdf. I hope that explanation was good enough because what, uh, third party tool that you use. So the third party API I use is called PDF generator. So what, yeah, so what it does is that it takes the data, it takes the HTML templates, then it substitutes HTML templates, then generates a PDF for you. [00:32:53] Kamille Parks: Yeah, [00:32:54] Okeowo Aderemi: cool. So, so this is like a precursor to in case you want to build, uh, different [00:33:00] apps on, um, on the marketplace. So this experience just shows you, like, the things you could do, third party APIs you could take advantage of and, um, And now you can integrate with different systems to make, uh, to make no code and no code a bit, uh, what's that word? [00:33:18] To expand, expand the use of it. And that's it. [00:33:25] Kamille Parks: So, friendly warning to other people who want to, uh, start building Airtable extensions. Uh, every Airtable API is different for reasons that baffle me, uh, where scripting in a scripting extension is different from scripting in an automation still within Airtable and then custom extensions are a different API as well. [00:33:50] And, uh, there are some things you can do in one of those APIs that you can't do in the others and vice versa. Um, but there is a lot of cool [00:34:00] things that you can do only in an extension. Um, and. I think it's a worthwhile exercise if you're coming from a coding background to dabble in doing an air table extension, because it kind of forces you to understand the product. [00:34:15] I think a little bit deeper. Um, and it's just, I think it's fun. [00:34:21] Okeowo Aderemi: Yeah, it is fun. It is fun. It's a good thing you bring up the point because while I was building, I did realize that scripting and Chrome extension APIs are totally different. [00:34:34] Kamille Parks: We, we have a comment from. A listener, and I was actually thinking about this comment, um, that we had previously seen, um, other solutions where, um, there was a gap in letting someone use one template to create multiple records in one go. [00:34:57] And there are some ways to do it with some of the other [00:35:00] implementations, but I think what this person is saying is they like your ability to just sort of, these are the three I want and they might be a random three were like not linked to a particular record in your other table. It might just be, I need row 10 for whatever reason and row 20 for a completely different reason. [00:35:19] Let me just select those two and generate a report with those. So, um, great. [00:35:26] Dan Fellars: Yeah. [00:35:27] Kamille Parks: Yeah, [00:35:28] Dan Fellars: we're, we're fans. Camille and I are both, uh, app builders or extension builders, and I'd love to see more. Love to see Airtable promote these more and make them first class citizens in their environment. I do believe that this would drastically open up Airtable's ability to accomplish everything that it could potentially accomplish. [00:35:57] Yep. So [00:36:00] good stuff. All right. So you're going to make this available. Are you going to, you're going to open source the code? Is that what you said? [00:36:06] Okeowo Aderemi: Yes, I'm going to open source the code because this was more of like an exercise, like get dirty into app development for example. So yeah, I'm going to share this code. [00:36:17] Dan Fellars: Cool. And if people want to connect with you, we'll put the link to your website. I think you've got your own personal website that shows all your projects and everything. Yes. Yes. And it's just your name. com. Is that correct? Yes. Yes. My name. com. Yeah. Very cool. Good stuff. Thanks for sharing, Remy. Thank you so much. [00:36:37] Godspeed. Okay, let's continue on. [00:36:41] BUILTONAIR AIRTABLE COMMUNITY [00:36:42] If you are not in our community with Remy and Camille and I, you need to join us. BuiltOnAir. com slash join. We'll get you in for free and be sure to join our Slack community with thousands of Airtable users like yourself and fans of app building. Um, also [00:37:00] sign up for our newsletter. [00:37:01] It keeps you up to date with everything going on. And, uh, be sure to subscribe to that. So built on air. com slash join [00:37:10] AUDIENCE QUESTIONS - WITH KAMILLE PARKS - MOVE TABLES [00:37:13] with that Camille is going to solve the audience questions and to move a table to a new base. Right. [00:37:24] Kamille Parks: So this was, I think, an interesting question. And, um, there are a lot of times where I'll read a question on the community forums where I feel like I'm an old person shouting at people to get off my lawn about very specific topics. [00:37:43] One of them is, how do I move one record from another? from one table to a different table in the same base, and I'm very much a proponent of don't do that. Have you keep your records in one table? That's where they belong. Modify that table as you [00:38:00] need. Of course there are exceptions to the rule, um, but there's another I think it's less commonly asked, or this is an example of it, where it's, I need to move the whole table from one base to a different base, but maintain the relationship that that table might have to other tables. [00:38:22] Um. After the move is complete, so while that sounds like a much more extreme example of what I previously said, never do, there are a lot of times where you might come to find that it's better to move your table to a different base, um, but have it sink down into the base it started in, and I've run into this a thousand times. [00:38:45] It's actually, Not necessarily difficult to accomplish, but it is tedious, and there's a series of steps that I like to follow that make it so there's as little data loss as possible, [00:39:00] although there's massive warnings that I will give as I'm walking through the process of how I might do this, and I'm going to do my best to do this on the team plan rather than on business or enterprise, because there are some tools that are helpful that are not. [00:39:17] Um, available to I think the majority of the user base. So with that preamble set, um, and then there's, there are answers to this question in the, um, forum. So I recommend looking at them. Uh, they're all, I think, good answers that sort of get at what that what you can do. But I'll walk through a particular example. [00:39:41] So in this case, this is the same base I showed, I think, last episode, which has a list of, uh, the winners of various seasons of American competition shows. And let's just say I realize that I have multiple different use cases for a [00:40:00] contact list, where these are all people, and I want to be able to use this. [00:40:06] List of people in multiple places. Now. In the scenario that I'm concocting, this base doesn't really make sense anymore for the data to originate here, because it has no more ownership of this data set as this other one that I'm eventually going to use it in. So I would rather have one sort of central base that houses my people, and sink it down into multiple different bases and turn on two way editability. [00:40:40] Now, one of the reasons why You would or you might not want to keep this is the origin point. Um, and, uh, you would want to move it somewhere else is using air tables to a edit ability. There are certain things you can do. And the, uh, original source of the data. [00:41:00] And some things that you can't do in the downstream sources. [00:41:03] So, one of those limitations is, uh, what APIs and, uh, automations can do to a two way synced record. Um, and then there's the notion of, if you have multi source sync, you're even, uh, less You're even limited more. So if I needed to sink in two sets of people into this space, I wouldn't be able to add new records here at all. [00:41:30] So, um, let's just say we've all determined that it's. Best that I migrate this data out of this base into another base and then sync it back down into the same, into the base that we're currently looking at. So a couple of things to know. In this particular example, um, I've made it easy for myself in that there's only one linked relationship. [00:41:54] I have looked at other use cases in the past personally, where there's 20 different linked [00:42:00] record fields and The process I'm about to do, you would have to do for each linked record field. Um, but the process is the same. This is where we get into why it's tedious. Like I said previously, so with this linked relationship, I can tell that I'm linking people to a competition and I've already made a formula field that just outputs what the record ID is for each of these, um, for each of these records. [00:42:28] So on the competition table, what I want to do. is quickly add a lookup of the record ID for, uh, those people. Uh, those records in that other table with no settings on. Last time I showed this, we went through all the joys of the new features to sort and limit number of options shown. I want every single record ID for all of these linked people. [00:42:55] Now I'll explain what we're going to do and why we can't stop here in terms [00:43:00] of just using that. Look up what we're going to do is we're going to export this data out of people and we're going to dump it into this other base, and then we're going to replace this table with a sink table. Well, when I do that, air table is going to delete all of the records in here and sink down the records from the old table, and they're going to have new record IDs. [00:43:23] So if I leave this. In place as it currently is, it's going to be a lookup of this field and when all these records go away and get repopulated, they're not going to repopulate this linked record relationship. Um, so this linked record, this lookup is going to be blank. So what I have to do instead is edit this field and turn it into a long text field. [00:43:51] And now what that's done is it's stamped the value of these records. So, um, of these linked records. record, record IDs. So that [00:44:00] way, if I start modifying the linked relationship, simulating all of those records and people disappearing, I am preserving the linked record IDs. So I'm going to hit control Z to undo that. [00:44:14] So that's the first part Of the sort of long series of steps I want to do. There are a couple of things that if depending on what plan you're on, there are other steps that you might want to take. Um, if you're on a higher plan than me, again, I'm doing this on a team workspace, but if you're on, I want to say. [00:44:34] Business and enterprise, although it might just be enterprise scale. If you click the tape, the base options, there'll be something here called maintenance mode where you can basically take everyone out of the base so that they're not actively making adjustments to data while you're in here. Um, if you don't have access to that, what you could do is go to the share menu. [00:44:59] Manage [00:45:00] access and then briefly demote everyone into read only and then remember to promote them back to whatever access they should have. That will prevent other people from, um, interacting with this data while you need to make these adjustments. And then the other thing, of course, you want to go into your managed field settings and check out the dependencies, but depending on what plan you're on, you might not actually get a bunch of. [00:45:29] Uh, information that you really want to use out of this, like, where are my link records going? Do I need to replace them on an interface? How many interfaces are looking at this table, et cetera. So, because I can't see the specifics of that, this is again, um, if you're on a business plan, you would, so you're not going to have that problem. [00:45:51] But, um, I would do a look through of the base first and foremost. Um, look at your interfaces and your automations [00:46:00] and make sure that if you're using this table people that you're not going to fire off a million, um, automations when all this information goes away and then is replaced. So if you have a record, or if you have an automation triggering on when a record is created, you don't want to have that turned on at the time that you're doing the process that we're doing. [00:46:25] Um, and then. There are a couple of ways that we can move data from here into here. So the first is, I could download a, uh, CSV of this information and then, um, import it into either an existing table or a new table, um, in my other base. But, um, a sort of hacky way I like to do it is to actually just sync. [00:46:55] Information out of this, uh, original [00:47:00] table into a new end point. So if I do Airtable base, save myself time by just inserting the share link. [00:47:12] That's all fine. That's all fine. I don't want to sync in this new table. We're going to create [00:47:23] once your table is done. The reason why I've done that is because depending on what fields you have in here, um, and how much data it is, it might be faster to sort of complete this. And if I had something like a Single select field or multi select field by sinking it rather than exporting a CSV. It's actually going to come in on this side as the correct field type. [00:47:51] So it kind of saves me a step of making sure that my field types are correct. Um, so now that I have my data in here, [00:48:00] I'm going to rename this table people original or something like that. And then what I'm going to do is update my sink settings. Choose my one source and hit remove source. So Airtable is making sure that I am serious about this action, that I definitely want to do this. [00:48:21] It's basically saying that was the only sync source, so it's going to turn this table into a regular table. So I'm going to hit remove because I definitely want to do that. I don't need this extra table anymore. So I'll just get rid of that so we're nice and clean. And so now, I have my stamped record ID of, um, these record IDs over here. [00:48:46] So let me try and find Kelly Clarkson's, uh, one so we can compare. So NENEDH, NENEDH. And then just to demonstrate, true [00:49:00] record ID. [00:49:07] If I do this, because this is a new table, a completely new base, the actual record ID of this row that I'm looking at right now is different, but I have where its old record ID was when it started. Um, and that's represented here. Everywhere that it's linked is also stamped in this value here, and that's why it was important to do that step because when we send this data back down, we'll be able to relink these records back together. [00:49:43] So now that we've done that, we're able to, uh, just disable this link. We don't need it anymore. And now what we can do is replace all of the data in this table with the new source that we've just [00:50:00] created. So in order to do that, what we'll do, I'll say, I'll call this archived record ID just so that the relationship is clear. [00:50:11] And then I will make this a sync source. Copy its, uh, value, and then what we want to do is click, sorry I move pretty fast, under our table that we want to replace with a sync source, we go import data, and then Airtable base. So, this is Airtable warning you that if you do this, it will replace existing data in this table. [00:50:40] Um, and it will, will not be editable. We can turn on editability after the fact, but this is just in our initial go. So, making sure that we've checked all of our dependencies, that doing this action isn't going to fire a bunch of automations and whatnot, it's not going to mess up anything, and that we have preserved the record IPs on [00:51:00] every linked relationship. [00:51:01] We're free to go forward. So if I hit continue and same thing as before, save myself time by just inserting the share link and then I am going to match up the fields together now. The field that didn't come over is a competition and I actually missed a step as well. So before I move forward. Oh, no, I'm sorry. [00:51:30] I didn't miss a step. We could do that later. Um, sorry, sorry, sorry. Um, matching up the field in the field. The one that didn't come over is competition, and that is because competition is a linked record field. So some field types aren't going to be able to be passed back and forth in this way. Um, but we would pass them back and forth in the same way. [00:51:52] So if I wanted to maintain the competition relationship, I could. Um, either bring it over as a text field and [00:52:00] copy and paste the value over or I could bring in the linked record I. D. over and then copy and paste that over in case there were two American idols. So it doesn't link to the wrong one. After I hit next and then I want to make sure that I bring in these other, uh, record these other fields as well that couldn't line up. [00:52:21] It's one more time warning you that all of the data is going to go away when you do this. And I'm going to do finish import. [00:52:32] It's going to take a few seconds, and then a few more seconds after this. Okay, so, um, record ID. This is the record ID of this record that I'm currently highlighting as it exists in this base competition. Archived record ID is the record ID it used to be [00:53:00] before I started any of this process. Remember, EDH for Kelly Clarkson. [00:53:05] And then true record ID, which is now a misnomer in this space, that's the record ID of Kelly Clarkson as she exists in this space I just created. So, a little confusing of which record ID we want to pay attention to, but this one, archived record ID, should match. Um, somewhere in here, EDH for, uh, Kelly Clarkson in American Idol. [00:53:31] So the last thing that we want to do is link these records back up. Now, what I can't do is just use a fill handle, copy and paste in here, because while you can paste in record IDs into a linked record field, remember these, these record IDs are no longer the, what Airtable, uh, recognizes as the, Uh, record ID for Kelly Clarkson. [00:53:58] So what I could do to [00:54:00] save myself some time is, uh, write a quick automation that searches for, um, matches. So what I'll do is call this match up linked records. And what I'll do is, um, I'll do this. I'll [00:54:26] probably only have to do this once. And what I want to do is find all the records in my people table where competition is empty and just in case where it has a archived record ID. It all should, but just in case we'll, we'll make sure that I have that. And then for each of those people records, we're going to find a [00:55:00] competition where The record IDs contains the current person's archived record ID. [00:55:15] And then we're going to do an update record step. We're going to update our people with the current one that we're iterating through. And we're going to fill in the competition field with the results of that, um, So I'm going to adjust, uh, this trigger to hopefully run right now so we can test and I missed my window. [00:55:46] So it's going to have to be another minute. Um, but I'm going to test on one individual record. So here are, I think we're going to start with [00:56:00] Harold based on how Airtable is reporting that list to me. So for Harold, we're going to search through competitions that have a matching record ID somewhere in that winner section. [00:56:15] And we can see that Harold was a winner on Top Chef. So if I hit update and then run as configured and then check over here, Harold has been relinked back into Top Chef, which is exactly what we want. And then in another 30 seconds or so, um, the automation will run for real and try and link all remaining 58. [00:56:42] So while we're waiting on that to happen, um, Any questions? Did I ghost you fast? [00:56:49] Dan Fellars: No, there's a lot going on there. [00:56:54] Yeah, [00:56:55] Kamille Parks: I warned everyone. I said it was tedious. Yeah. [00:57:00] So they're, they're just going. So, um. We all know Fantasia, Juan, Nidal, and then there goes Kelly Clarkson right there. So, um, we have done the process and I mean, as soon as this finishes, but we've done the process of taking records from one table, moving it to a different base, singing it back down to the original table, and then reestablishing links after the fact. [00:57:25] So once this runs, we don't need that automation. Um, again, and then if you had more than one linked record field, I, in this case, only have one, but if you had 10, you would do the same process 10 times. There's no difference in it. You would just end up with a very confusing series of, um, of, you know, record IDs. [00:57:47] Now, there's only one record ID, so you don't need many more copies of this, but, um, hopefully that was clear. That was, [00:57:54] Okeowo Aderemi: that was something that was impressive. I've had to do [00:58:00] this many times. This may [00:58:02] Dan Fellars: not [00:58:02] Kamille Parks: work in a sync [00:58:04] Dan Fellars: table, but can you make the archive record ID be the primary key of this table? [00:58:13] Kamille Parks: Um, maybe. [00:58:15] So [00:58:15] Dan Fellars: Just copy and paste? [00:58:17] Kamille Parks: Let me Before I, before I attempt that, when you say copy and paste Copy and paste it where? [00:58:26] Dan Fellars: From the competition. Um, because then you'd be copying the primary key. Which is the archived record ID from if you go to your competition table, and you would just copy that record into [00:58:44] Kamille Parks: what you're saying, and you, you might be correct. [00:58:47] So if we do this now, it is very, very difficult to change the primary field. Of a synced table. So you're in great luck if a unique ID is [00:59:00] the was already going to be your primary field. But if it was going to be something like name, which is repeatable, I wouldn't necessarily recommend doing this. Um, but let me. [00:59:10] Try and do, as we just described, where I want archive, record ID to be my primary. I do that and give it a moment to think. And then, so you can, [00:59:24] Dan Fellars: you can't go like just to the people table and, and make it the primary field. [00:59:29] Kamille Parks: No. Um, and I'll show that in just a second. So here people is a sink table. Um, change, primary field is disabled. [00:59:40] And then, um, if I go to my. sync settings and then edit sync fields, there's no way to change what I've already said is the primary field. Um, but to your point, if I wanted to keep these as my primary, um, [01:00:00] field, I could, in theory, then do this. Um, and to your point, that works, but [01:00:08] Dan Fellars: then you can't change [01:00:08] Kamille Parks: it back, then you can't change it back. [01:00:11] So if you instead had a different unique ID that wasn't record ID, and you wanted that as your primary field, that's fine. But when I add a new person to my new source, it's never going to have an archived record ID in this case, because it never existed in the old one. It was never generated. And then, so now I wouldn't be able to perform that action. [01:00:33] Um, and then the last thing I'll, I'll say is, um, now that we've done that, I don't need this field anymore. So I would be able to delete it. Um, and then if I wanted to turn on edits, I would be able to hit this toggle. And then again, if I were on the business plan, I could actually follow through, but you would be able to turn on editability after the fact for both, um, field edits, as well as creating new, [01:01:00] um, if that's something that you needed. [01:01:03] Awesome. [01:01:04] Dan Fellars: Very cool. Yeah, that's, that's a useful trick. Okay. [01:01:09] Kamille Parks: And then just for the purposes of recording, I will do, I'll rename these fields so that they're ultra clear which one is which. There we go. [01:01:24] Yeah. [01:01:25] Dan Fellars: Okay. Awesome. Well done. Yes. Thank you Camille. Renny, Remy, thank you for joining us and we will catch everybody next week on episode four. Have a good week. [01:01:36] OUTRO [01:01:37] Okeowo Aderemi: Take care. Bye. Bye. [01:01:54] Intro: Thank you for joining today's episode. We hope you enjoyed it. Be sure to check out our sponsor, [01:02:00] On2Air Backups, automated backups for Airtable. We'll see you next time on the Built on Air podcast.