Learn how to manage clients, collect and track payments, and create a CRM using Stripe payment links and Airtable. This is part two of a series with guest Joe Krug, Finsweet Founder.
Aron Korenblit: Hey, Joe. Hey, Aaron, how's it going? Oh, no, I think I've lost my audio. Oh no. Can folks hear me on the stream? Like I've okay. One second here, folks. This is on me. Uh, Joe, have you cut out or does it mean, can folks hear me? Okay, so folks can hear me there, Joe. Oh, maybe it's here. One second. Let me try something.
Joe Krug: I can hear you. Okay. And Michael Collins confirms we can
Aron Korenblit: hear you. Okay. Everyone can hear everyone now. Let's we're starting over. This is the edit clap. Okay. No, that was just, it was just a OBS thing. Uh, I was just telling Joe how finicky all of this is, but we're good to go.
So Joe, welcome to Automate All the Things.
It's an honor to have you back here for folks who are not, you know, Webflow. Folks who are, who don't know. You tell everyone a little bit by yourself.
Joe Krug: Well, I am the founder and CEO of Finsweet and we are a Webflow exclusive agency products and community team. We do everything Webflow. And the reason I'm on this stream is because we're talking about the recent decision of Webflow to cancel their client billing initiative.
So we talked about this last week on the Finsweet stream. And now I'm here today to talk about this next part. And I will say I'm excited to learn a little bit because every time I come here, every time I watch something with Automate All the Things, it's something new and it's something I learn So I'm, I'm, I'm ready to take that next level in the Airtable setup.
Aron Korenblit: Well, first of all, I think you're being very humble Finsweet is, is, you know, uh, uh, Webflow is one of the largest, you know, one of your largest agency and you think you've done so much for the community. So it's an honor to have you here. And, uh, I love the fact that you learn something. I think. I every time I do this stream live, I also learned something about my own workflows and how they don't work.
Uh, so hopefully I'm happy that you can learn from, you know, our, our mistakes and my mistakes. But, um, as we're going to connect, kick this off, yeah.
We're going to show people how to migrate off of Webflow client billing and. Preface this by saying, I am not a web flow client billing, user, everything I'm showing here was kind of, you know, bits and pieces of, of the workflow.
So what I'd love you Joe, to do, and everyone in the chat is I keep me honest that maybe your workflow isn't exactly what I'm going to show. And I think that's really the exciting part. If you're saying like, no, I have different prices for how much I charge or my clients are structured in this way. Like let me know in the chat.
And that's really what I'm most excited about. I think I've built or we've built together like a basics of this, right? So like a basic CRM, but it's like flexible to really encompass any use case. So before I jump into like the fun part, the nitty gritty, Joe, maybe for folks who aren't Webflow user,
I think there's still really a lot of value here, but maybe give us like the overview of what is client web flow, client billing, and what are we trying to reproduce here in a separate system?
Joe Krug: client billing is a system that allows you to charge a hosting cost directly to your Webflow client. So I built a site for a client it's $16 per month for hosting, and I can add any additional amount on top of that to make money myself for hosting my client's site in my account and Webflow has just recently announced that they are going to.
Get rid of this feature. It's no longer there. So anybody that's using the client billing feature has to migrate off of it. Right now, if you're going to host your client's sites, you have to find a different way to build them and to charge them for those sites.
Aron Korenblit: Right? So my understanding is that you still have to pay Webflow, right?
So Webflow has a per month charge, and then you're trying to get that charge from the customer. So. The pay that like hosting, but also what I've heard from, from, from folks on Webflow is that client billing was also kind of a constraint in that you can only charge a monthly. Instead of like having different models, maybe you want to do a retainer, a cup for six months or, you know, hourly and then have that hosting be a part of that one payment, not be like, oh yeah, you have one invoicing for my 10 hours.
And yeah. If, when we're going to start hosting, I'm going to send you like to another plate year, your credit card doesn't work from here to there. Like you got to enter it again to really. Migrate from that and use it as an opportunity to expand to different potential, you know, billing models and those that are closer to what the client wants, you know, is that the right understanding?
So like solving this piece, which is just passing along that payment, but also like enabling other ways of, you know, making money off of Webflow.
Joe Krug: That is very correct. I would say Webflow client billing is incredibly easy to use and. Not very flexible. Right? You just have the one option. So this makes it not very scalable for a lot of companies.
It works really well for some companies and maybe some companies use it sometimes, but I know at Finsweet, we grew out of client billing almost immediately after it was released a few years ago. We, we just have too many different ways to build people in too many, too many. Paths to, to bring in that revenue.
So it didn't work for us. Right. So this system I'm guessing today, we're going to learn a lot about that flexibility and what we can really take advantage of here.
Aron Korenblit: Yeah, absolutely. Okay. So let's jump in. So folks, what I'd love to know. Is, um, tell me about how you want to bill, right? So you just, do you just want to pass along that Webflow hosting?
Um, or are you like, oh, I give 10 hours upfront. I want to be built twice, like at the beginning of a project at the middle of a project and then a third kind of payment, you know, in an hourly rate. So tell me a little bit about what your different plans are and I've invented a few here. So with that said, let's jump into.
An overview of the workflow as I'm imagining it. And then I hope that kind of give folks ideas of like, oh no, mine is a little different. So let's jump into a little browser here. Boom. Okay. So my idea here is I'm going to use Airtable plus Stripe. Um, And I, again, I first I worked for Airtable, so, you know, I was kind of my default, but I think what I'm doing here is usable.
You can use, I imagine Trello click up whatever. I don't want people to like get bogged down into the, um, the mechanics of like the tools that are used. Um, so what I'm imagining is you have a list of customers. We're actually, maybe starting first. I give a list of product. Right. The you sell, maybe that's like the basic, so you, you either sell Webflow, hosts, the basic hosting, CMS hosting business hosting, and then I'm imagining an hourly rate, right?
So those are the things that you sell. And I'm being, trying to be very intentful of my words. Cause I know CJ from Stripe is watching in the chat. I want to mimic Stripe language here. So there are things that you sell, which we'll call products, right. But those products together go into plans. So you can imagine, see, I'm seeing some folks in the chat, um, you know, someone says I services is something that they sell, right?
So you want to say, okay, I sell business hosting plus a bank of hours. So I'm calling this hourly rate and I only have one, which is $200 and we're going to get into like the price ID and product ID and all that stuff. And then with those two things together, I create plans, right. So I can say, Hey, I'm just selling.
The Webflow hosting, right. Or I want to sell the business hosting plus 10 hours of my, kind of like consulting right. Or Webflow business plus 50 hours. Or maybe I'm like, I just want to sell hours of consulting. They can figure out billing on themselves. Right. So there's a flexibility here. that you're just saying these are the things that we sell and we package them in this way.
Now my idea here and again, Joe, like, again, Is for each one of these plans, let's create a payment link. Now payment links in Stripe is a hosted portal where a customer can come in, enter their information and pay you that plan. And it works both on one time and recurring billing. So let's imagine a God, I hope this works.
If it knows that I think we'll be able to fix it, but let's say you want to create Webflow business hosting, plus an hourly rate. You're going to go ahead and create a payment link. I've written up this little script that I'm happy to, you know, open source and add into description and boom, you've now created that plan.
So this is now something that you can send to customers that say, Hey, you're paying me $45 a month for Webflow co hosting business plan. And you've got 10 hours at $200 each and the customer could go in and pay this. Right? So this is like that ability to go out and pay it. It's this is live let's test data.
Right? So now let's kind of think about, okay, I have that gate, but I also have customers who need to be associated to plan. So I have a customer table. So let's call this like, like Joe plus firstname.lastname@example.org. Joe is an amazing client. And, you know, Joe is going all in and he wants the one we just created, which is 10 hours plus Webflow business.
I can send an email automatically like hey, you, like, we just agreed on the phone. You can get an email, you can text that person. We can build that automation. Uh, if anyone finds this interesting, and yes, we are an Airtable. Um, but again, this works with spreadsheets, you know, like I like Airtable because it lets me associate those things like we just did.
Right. This customer has this plan, and then I can send this specific link. Now you notice the difference with this link is that it's pre-filled now this customer it's has Joe a plus test at Finsweet.com and something else that's a little behind the scenes is I have a client reference ID, but every time that Joe pays me, I'm able to associate that payment back to this website.
Right. And if ever Joel lapse payment and we'll get into that. I'll be able to like, yo Joe, you didn't pay me for this specific plan that, you know, you paid through this. So, you know, Joe pays me and that we can set up together. And then each payment that comes in creates a line item in this table. And this is using web hooks.
So I'll talk about those at the end, cause they're a little more complicated, but the idea is that you have products, you create plans. USA associate customers to plans. Once they pay you receive a line item of every single payment in this table. So that is my idea. Like, and I can dig into all of this and I'm gonna show you the Stripe side, like how to set all of this up.
But this is like my new idea for a CRM for Webflow client billing. Again, I'll, I'll open source this and or the rest of the streamer, like walk through how to create each one of these things. We'll go into Stripe. We'll set that up and then I'll show you how to run the scripts and all that. But Joe, with this, any thoughts or suggestions of like, does this make sense as a replacement for client billing?
I think it can absolutely be a replacement for client billing. The first thing I think of is the amount of flexibility that we have with this in Airtable. I mean, we can set off any other types of automations or flows or integrate other applications or come up with all the plans. We have somebody in the comments who said it, uh, David monthly plus annual options.
You can have a whole set of links for monthly, a whole set of links for, for yearly. And based on that client, you can associate them to that payment preference. So, yeah, I, I'm just thinking flexibility here. I think it totally works.
Yeah. And I think what's interesting here, you know, what, what really struck me is if a client is like, no, I want 62 hours.
And you're like, oh man, like, well, how would you do that in client billing? Right. You'd be like, okay, what does that like monthly equivalent for a year? Whatever here. You're just like, okay, you want Webflow business? You know, plus 62 hours and you say, okay, this is the first, the, the kind of hosting is Webflow business.
Right. And then, you know, I want an hour, my 200 hourly rate, and then I get 62. Right. And I'm like, okay, this client gets a hosted payment link. We're going to generate that payment link. Um, and if you're like someone who's like more interested in the code of this, uh, check I'll put a link in the description for Code Meets No-code where we walked through, like step-by-step how to create these scripts and boom, you've got web flow 62 hours, you know? And have monthly, and then it was like, oh, I need a top up, boom. You create a top-up plan. You just create a, top-up like 10 hourly rate. Top-up you send it back, you can send it to multiple customers.
So, you know, I I'm really like excited to dig in and I'm curious in the chat, let me know, like, do you want to go into the weeds of how this was built or are folks more interested in like the high level what's possible with this? Because it will be kind of given the base away. So yeah. Let me know in the chat.
But I totally agree with you. I think there's a flexibility here and, um, you know, I think things that weren't possible with Webflow client billing and,
okay, so let's go over to the Stripe side. So we just did the Airtable side. Now what I've done here is very closely mimic the structure of Stripe in Airtable.
And the reason is, is that most of your work should happen in Airtable because Stripe does not have like a customer management. Yeah. You know, there there's not a CRM, right? So what we're seeing mostly is, is in the Airtable. So the main things you need to understand is that in Stripe, you have this concept of products, right?
And I've created one product for each hosting plan. And then I have one product for Webflow consulting that has, you know, I'm only using one price, but there could be potentially multiple prices. Every one of these plans has a product ID and the price ID. When you're creating a payment link, you need to pass along a price ID so that Stripe understands what to put here. So there are actually two things that go into a payment link. It is the line items and each line item has a price. And a quantity, sorry, has a price and a quantity. If you want to charge $45 for Webflow hosting, you need to pass in this price ID and a quantity of one or the subscription.
And if you want to pass along, oh, I want Webflow hosting business plus 10 hours of Webflow consulting at 200 an hour, you need to then pass a second line item with the price ID 200 with a quantity of 10. That's how Stripe will understand that you want to create a payment link with those two line items, which will be reflected here.
That's actually like pretty simple. That's how it works. And so from there, it's relatively simple, right? You just have payment links now I'm creating them from, from, from Airtable, but you could create a new payment link right here manually. You don't have to use the script or write the script, you just say, okay, what product do you want?
Webflow business hosting. Just one. I don't want to collect tax. There are tax options for folks, right next, which account we're not going to split payment. We're not that fancy and boom, like we've just created a Webflow business hosting link. Now we can just copy that and bring it back into Airtable. So I've made it quite fancy where you need to like re run a script.
Uh, but there's no reason to be like, you can just go create that, bring it into air table and then copy paste here. But, you know, I like, I like having one place where I do all my work now, the other thing, and just, I'm still going through Stripe here. Once someone fills this out, right?
So let's say joke, Joe pays me.
So let's go into customer. Joe plus test. Am I sending you the right one? Yeah, I give you 10 hours. Yeah, right here. Okay. Confirmation 42 42. So folks want me to go into the weeds. Okay. Joe, do you want me to go into the weeds as well?
Joe Krug: Yeah, let's do
Aron Korenblit: it. You're Joe Krug, I'm assuming cars are in your name or you'd like to big time.
Do you have like a, like an alias for your cards? I
Joe Krug: do. I have, I have an alias, many aliases.
Aron Korenblit: Um, so, so we're, we're creating this payment, right? And this is going to do a few things. One, we're gonna have one payment of 2004 45, which is a checkout payment, right. It's a checkout payment. And then it's going to create a new customer in Stripe.
That is Joe, right? So it's saying, okay, I just got payment for Joe for this payment link, but if you go into customers, I see Joe test and sweet, right, right here. As a payment. So I just received that payment of 2045. And now I can then bring that back into air table. Now, if this worked correctly, I see a success right here.
I don't know if that's the one we just created or not check automations, initial payment receipt. It failed. Okay. I'll, I'll fix it later together. This is actually an opportunity to do the webhook, uh, with everyone. So it creates a new customer and it creates a payment. So now what that means is we can bring back that information into Airtable.
We can bring back our payments. Such that we're able to track the full loop. So you send that customer an email saying, Hey, you know, we want you to pay this plan. They pay it. And then we see the payment in Airtable. Does, are there any, like, I want to make sure that it's clear, like you can do this all in the Stripe dash.
But I'm doing it in Airtable because I'm fancy. Any questions about the Stripe dashboard of folks have Joella, you'd be the voice of like the Finsweet user, but also happy to go into the chat with the ideas of questions.
Joe Krug: Well, we, we use Airtable for a lot of different things. We are we're heavy Airtable users.
So. The idea of being able to integrate the payment side of it with other Airtable management tools is, is really nice. But if you're watching this and you're thinking, Hey, Airtable is just a little bit too much for me. Maybe I don't need it. Maybe my business is just a little smaller. I think just Stripe only is a great option, uh, and you know, understanding this system and how it works is super important.
Yeah. It's, it's such a scalable platform. We talked about this last week. I get so excited with, with platforms
Aron Korenblit: Yeah, no, I totally agree. And, and you know, it's weird cause I always come on the stream and I'm like, here's like the 2000%, you're all in on this kind of framework and you want to do everything in one platform, but you know, frankly, like for my, you know, if someone comes and says, I want a sponsor, the APTT newsletter, or, you know, I want to sponsor the stream, which actually you're the only sponsor.
And I say no to everyone else, but, um, You know, I actually just create a payment link and I'm, here's the payment link pay it, you know, I don't need an accountant or anything like that. Like, I don't need a CRM cause I'm just like, I have one sponsor for the newsletter on a monthly basis. Um, and so, so absolutely you can do everything.
And then you're like, oh, I can't manage all of this and Stripe where my accountant wants to see payments. Or there's a great question from penny. Like, can you split out the service fee in Airtable and you could absolutely do that using Webhooks.
Um, there's the great question from a Mixel, which is, can I explain the structure of Stripe?
Um, and the answer is yes, absolutely. So in Stripe, what you need there. I don't know how deep I want to go here, but every product can have multiple prices. Right. So I have one product and price for each Webflow hosting plan. So I have business hosting, CMS and basic, and then my Webflow consulting as to prices.
That is our first model, our first model, or first kind of able, if you will, or thinking, is that a price? It is products that can have multiple prices. Every product is something we sell. It could be t-shirts it could be whatever, like a product is something you sell. You should have one product for each thing that you sell.
The reason we've split out these into different prices is that you have different tiers. So there are different, like Webflow sells different things based on what plan you're on. And so you should have one plan for each price, then it's actually quite simple. Then you just have a customer. Right. Which is the people making the payments.
And if you're creating an invoice in invoices, you know who the customer is and you know what product they want and you send the invoice with those, both of those ahead of time, you're saying, send this customer, this product and they will pay payment link is actually saying, I might not know who the customer is upfront.
So let me create a hosted place where that customer can come and make the payment. And then I could send that link to multiple potential customers. So what's interesting here is payment links allows you to say, I will sell this subscription or these bundle of products potentially to multiple people. So I don't want to generate an invoice each time I joined to generate one hosted place where folks can come and pay and then we're good to go.
Um, and so, oh, sorry. You got to, man, we've got to remove the. Is there such a good question. Um, so yeah, so I was here in products talking about prices with products. So each product has multiple prices and customers. If you already know the customer and the product, you should go to an invoice, but if you are going to sell a bundle of products to multiple customers, you should use payment.
Um, there you go. And CJ is adding a little bit of context there, so that's great. Um, And so when you think about it, I've recreated that same thing in Airtable. I'm saying here's a one-to-one mapping between what's here to Airtable. Right. And what I'm creating is every payment link is a plan. What I'm calling a plan, which has.
Either a hosting service, right? The different Webflow hosting services or a monthly bucket, or sorry, a bucket of hourly rates that I'm putting together and same sending to a payment link. Um, does that make sense? Hopefully to folks. Okay. So then, you know, yeah, go ahead, Joe. I have a question. Yeah.
Can you create too many products?
To sell. Like, for example, at Finsweet, we have, we have eight different hourly billing rates, right. For all different types of people. And then we have different charges for different types of, and there's just so many options. Is there any downside to creating a whole bunch of plans?
I would say not necessarily.
I think. The risk you, you, you have is just like getting lost in them, right? So let's say someone wants 62 hours. Someone else wants 65 hours and 67. And I think another risk in terms of just management, especially as you get into like the big, big, big, big, not amounts, but number of clients is it could become difficult to track if one customer is on multiple payment links.
So let's say you sold a customer like 12 business hosting plans. And they default, they default they don't pay on one of them. It might be difficult just in this model to be able to say like, this non-payment is related to this specific hosting plan, but it will be easy to say that non-payment is specific to this customer.
So I would argue that from a business wise, you just want to reduce the number of like things that you sell. So if someone wants 62 hours, you say, I only do a hundred or. Right. Just cause that's like, it's easier for you. It's easier for them. Right. But from a purely CJ, keep me honest here for me. Purely like structure there's no, that you can do as many as you'd like you might say, I want 63, 63 0.5 actually.
No, maybe not 0.5, but um, you know, 1 10, 1 20. There's no. And there was a someone else in the chat that said, you know, can I, can I bring in project management or hourly billing? You absolutely can. Right. So, because you have your customers here, you could have, you know, um, time tracking or, and then start tracking the time you do per customer and be very accurate to that customer to be like, Hey, like you were overarching.
Right. Like, I have an hourly breakdown because I'm tracking that in air table to you. There's a lot of flexibility here that I think is really, really interesting. Um, cool.
So let's get into some of the, uh, some of the weeds here, right? Which is, okay. Let's imagine you, you copy paste this thing and you're like, okay.
I can create, I've created my products. I've created my plans. I've got my payment links. Let's just create a few. Um, and link This is me just showing off the script, you know, um, am I proud of it? Absolutely. And did someone help me? Absolutely. CJ, huge shout out for helping me, you know, write this code. Um, okay.
So we've just created seven payment links and these cover, the gamut of this person just wants business hosting. This person just wants, uh, you know, business hosting plus a specific hourly rate. Um, Yeah. So Robert says, can you just have an increment? Absolutely. Instead of just a specific quantity here, right?
This is what I love. Right. We can give her the geeky instead of a specific number of hours, you can create an increment. Right. And then just create a formula field that has that like increment times the number of hours. And that's, what's going to show up on the payment link right here. You can absolutely change this to increment.
Um, okay. So you're like, okay. I, you know, I've got the payment links, how can I make it easy to send it to the. Uh, so one idea I have is like, just create an automated email, right? So let's say I want to send this payment link. So what I've done here is I've created, okay. Joe I've associated Joe to the Webflow business, plus 10 hours as a linked record.
And then I pulled in the specific Stripe link and then I prefilled it with Joe's. And the record ID. So any payments can come back in and we'll do that in a moment cause it's broken to anyway. So let's go ahead and automations and we're going to say, okay. Send email to customer. So when a record matches conditions and let's just see what condition, okay.
So I just want this little check mark to send, uh, an email to the customer with this. Nope. If you are unfamiliar with Airtable automations, it looks very much like Webflow logic. The only difference is that it exists and you could use it. Um, That was a little knock. I love the Webflow folks. Um, I'm joking.
I'm joking. No one, no one tell the Webflow folks. I said that. Um, so, um, good question from Christian. I'm going to get into that in just a moment. Can you generate an invoice? And the answer is absolutely. Um, okay. So, um, What I want is when I check this send email, uh, it goes ahead and sends an email to the customer.
So the table is customers. Uh, I, I'm going to hear about that. I'm going to hear about that. I've been planning that joke for like a week. Um, so when's the good one. I liked it. Thank you. Thank you, Joe. Um, thank you. I appreciate that. Uh, so when send email is checked, right? That's what is going to trigger this automation?
That's when it's going to put it in. What I want to go ahead and do is send an email, right? So I can send an email from Airtable, which is, uh, you know, maybe not ideal for most folks, but you can also send an email from a Gmail. Right? I don't think I have my Gmail account. No, I don't, but let's just send it from Airtable.
It'll be an example, but you can send it as yourself. Right. Um, and then say to you, and then we're going to pull in the customer. So I'm going to step one where we've pulled in that information. We're going to pull in the email. And then we're going to say your, and then look at this fanciness, we're going to go into the plan and we're going to insert the name.
So it's going to say your, you know, your Webflow business hosting, plus 10 hours of consulting. And then we can say high areas, a link to pay your plan.
And we're going to go with the payment link, send where I've done that. And then let's generate a preview. Actually, that's a January preview run tests. Oh, right. I got to actually, I've got to, you know, send an email to test this out. No records match the condition. That's actually pretty cool. It's new from Airtable.
You can generate preview. We're saying, okay, we're going to run the test. Run. This is a record that we want to run it for. It ran successfully, it's generating a preview. So it says, Hey, your wet flow business, plus 10 hours high here is a link to pay your plan. Um, you can add mark down, right? That just says like, here is a link.
You can link it here. So it just doesn't have that whole URL. Boom. And now, so my recommendation for folks is like, yes, you're going to call your customers all that, but just create a list of all of your customers. What plan you want them on. Talk to them one by one. And then you could just send your email after that conversation as a followup, like, Hey, by the way, right after you're done, you could just go send email.
Um, and that's a good way of migrating. So you have that conversation as we were talking last week with your customer, Hey, I've put, can we just agree that this is the right plan for you? It's going to start at this day, blah, blah, blah, check box, send email. And you're going to get an email right after with the right payment link and it's correctly.
Pre-filled so that customer comes on. It has the right pricing. It has their email and we can fill in the information.
Joe Krug: Nice. I love the customization options for the email side. I know a lot of people in this industry, they want the email in a certain way. You know, I like, I like the Gmail connection where you can send it direct from your Gmail and it just looks like a handwritten message, you know, simple, plain text.
Yeah. You know, sometimes I would use like Zapier for that. Hmm. But you could do that right inside of Airtable. Yeah. So you, you really have, you could say exactly what you want in the email. You can add other information to that email. So this is the type of flexibility that I would have in mind for going into, to something like Airtable here.
Aron Korenblit: Yeah. And I think what I've seen done as well, like I'm, uh, I'm always a little hesitant to like send an email that that feels automated so you can actually send it to yourself and in copy paste it. Uh, to the client, right? Um, I've, I've done that when I was a little more, uh, a junior, I would say, but just a little more stressed out.
Now I have a stream and I make mistakes. So, you know, if I, if I email a client with the wrong payment link, I don't, you know, I'm like, oh, you know, that's too bad. That's too bad. But I used to be a little more stressed out and you can send it to yourself. Um, so that's an example of just an automation, right?
So when you think about it, like, okay, you're, you're, you've got your products. You've created your plan. You've imported every single one of your customers. You've spoken to them, right? You've said, Hey, you're going to get an email with this were migrating for this reason. Do you want a couple more hours?
Right? Can we do all that? You send them the email, they receive a link. They pay it. Now there's a lot of questions. I think in the chat, especially from penny and others of like, wait,
how do I track the payments that come from? So a little bit of theory here is that, um, most of these will have subscriptions.
So when you're paying a payment link, you have you steps that have many more steps, but, um, the first is you have a checkout. What that means is that the person paid this whole amount. This whole amount is your first payment of hosting and a set of hours. Now the set of hours, there are no other payments after.
Right. But the host, the hosting is a subscription. How Stripe thinks about a subscription. It is a series of invoices that is auto paid with the card on file. All that to say, if you want to track payments in Airtable, there are actually three steps you need to do first. You need to track the checkout completion, but did the person pay the check?
That's number one, number two, did they pay the invoice? At least invoice paid, and third is invoice failed, but did they fail to pay the invoice? So I'm going to do an example of how to set up that first one, the full amount paid out. And then I'll just kind of talk about how to do the others, the invoicing as examples, but those are the three buckets that you need to.
If they paid the check-out sorry. Did they check out of the first initial payment link and are they on payment with each invoice? Um, so I'm just checking the chat. Um, so there's a question I wish we could add custom fields to payment links. Um, quick note here, you can actually add a customer reference ID and that's what I do here.
And that's actually going to come into when we do the webhook side. So I've created, um, It's not custom per se, but at least you can have a client reference ID. And my recommendation here is actually the, you take the record ID and Airtable, right. This right here. Uh, we've moved this around and um, that way you can associate it to the right customer.
And if you have multiple customers on multiple plans, these the record ID will be unique. Okay. That was some geeky stuff, but, um, okay. So let's talk about Joe. Does that make sense? Am I going to quick? No,
I think this is great.
Yeah. Keep going. Yeah. Um, okay, so here we want to start tracking what payments we've received.
So for instance, I want Joe's payment to appear here and be associated to Joe. Now, how that works in Stripe is they have my favorite thing in the world. Uh, webhooks. So webhooks are essentially saying they're like, uh, they're like, um, there are calls. But when something happens in Stripe, it's going to say like, okay, this happened, who do you want me to tell about this?
Right. And how applications communicate through webhooks is through URLs. But what that means is I'm going to create a URL in Airtable that says, okay, when the checkout has been completed, Stripe is going to call this number, make sure to pick up this number at all times and Airtable's gonna be like, yeah, I'm always watching the phone, always watching the phone for Stripe to call me to say, I've received the payment.
And that conversation will be like, okay, I've received a payment for Joe in this amount. Can you create a record in Airtable? And Airtable's like, of course I can. That's what I'm paid here for. And they literally never sleep. So it's awesome. So we're going to create an automation here and I've kind of already created it, but I can let's.
I mean, let's do it from scratch. Why not? Let me turn this off you automation. And we're going to say initial payment, reception. Um, And then when a web hook is received, I'm going to copy that URL. So this is saying, this is the phone number that Stripe needs to call. And CJ is the person who helped me with that analogy when I was wrangling with web hooks.
Um, so I already have one set up, but let's, uh, let me, let me sunset this one disabled. We're doing it live. We're doing our live. So I'm adding a new end. The end point URL. So this is saying, what phone number do you want Stripe to call? And it's going to be that Airtable URL and RBC. This is when in initial payment it's paid and then I have events.
So this is the saying, I'm going to call this number only when these things happen, what are the things you want me to call Airtable forth? And we want checkup. It was checkout session complete. Now a thing here. And, you know, there are a lot, a lot, a lot of web hooks, right. There would literally, there's not much that happens in Stripe that there isn't a web hook for.
So one little thing is that you might get confused of like which web hooks should I be using. And when that's the case, you should tweet at CJ or me that's I don't have a good answer for, or read the documentation or join code meets no-code and ask. Right. So check out session completed. There you go. Add that event and we're only going to have this specific event, and this is something that folks should know.
Um, how Airtable works is that if you have multiple types, Of web hooks being sent to air table. You shouldn't send them to the same URL. You should have a one-to-one mapping between the data structure or the web hook from Stripe into air table, cause air table. We'll just take the first web hook, look at its structure and go down the tree.
If the structure changes, which it does for different web hooks, it'll be like, oh, I don't understand this web hook. I don't understand this conversation. So you should give it a separate phone number, a separate URL. Okay. At that end point. So let's actually pay again, just because I want, I want to see this event.
Right. So let me go back here. Let's imagine that Joe's a really, really sweet guy and he paid me twice and I'm never going to tell Joe about it. Um, boom, or two for two. Oh, also pro tip. If you're ever in like the Stripe world and someone makes a joke about 42 42 it's that's because it's the test credit card.
I don't want to tell you how long I was on Twitter. And I was like, I have no idea what these 4, 2, 4, 2 jokes mean just, you know, word of caution if you're entering that world. Okay. Yeah, it should be done. And the reason it's taken long is just cause I've, I've a bunch of web hooks that needs to fire, and this is in test mode.
So here we go. Rush here.
Okay. So we just received that web hook. So this is the conversation that Airtable and, um, Stripe are currently having and saying, okay, I paid two 20000 cents. So 2045, right. There was no tax. There's all this information coming in. What we want is to send this information over to Airtable. So I'm going to go here.
I'm going to go to initial payment received, and I'm going to test the trigger. As I go. Yeah. Yeah. Okay. Me and shrimp just had a conversation, right? It's the exact same thing. It said, okay. Here's what I got. I got this data. It's in this object. I, you know, they told me that this person paid 2000, 20,200, 4500 cents, for some reason it's incense, but I'm sure there's a good reason for that.
Um, and now I'm going to say like, okay, when you have that conversation, go ahead and create a record in Airtable. That, um, you know, says that Joe paid this amount. So we're going to go ahead and create a record in our payments table and said, okay, what, what should I fill out? So the amount, right? So the amount incense, we're going to go to step one.
I think folks can see, I consume it if needed. We're just going to go down that data tree, right? So I'm going into data going into object and then amount, total. Um, inserting that and say, that's what you should put there. There you go. Payments. Okay. So there's a lot of really interesting questions. I'm going to set this up and then I'm gonna, I'm going to jump to it.
So then I want a Mount sense that is, I want success, right? So this is a completed, this is a correct payment. So I want status equal to success.
And then I want to associate to the customer. Now, remember that the way we paid this webhook, if I go into the webhook, there should be a customer
somewhere. Oh, I did we not include it there? Customer client reference ID, right. This is where I get geeky, right? Because I specified that this customer client reference is a record ID. Now I can go to the customer table, find that record and associate the right one. So before step one, I'm going to go ahead and add an action.
I'm going to find a record. Can I move these two? Oh no, I can't anymore. Okay. So, oh, well I can add an action above. Good, good, good, good. Okay. Fine record. Let me delete this. And this might be like a small thing, but this was a lot of consultants told me this, like maybe the email that they use on this link is not the email you sent, that you, maybe someone else's paying or whatever.
So you still want to associate it to the right customer, to the right site. That unique record ID will not change based on the email. So let's go into customer. We're going to find a rate based on condition. And I want where. And I have a client ID. Yeah. I think client ID is what I called it. Client ID?
Yeah. Client ideas. Just the formula for the record ID. Yeah. There you go. So find it and go to step one dynamic or the webhook or the body go to the data, go to the object. And we want client reference ID let's test that. And there you go. It found this record right here, Joe. Plus that's exactly the record we want.
And then create the record. We're going to associate that customer with that record ID from step two. And then we just want table record of deep search, and then we're going to run as configured. So what we're hoping to see here is a line item with that whole payment. Of 20,200, 4500 cents. Thank you, Joe, for paying so much money.
So it just went ahead and created that right here. So we have payment from Joe of this amount. At this moment, it was successful. We can see the plan that they paid and the payment date that was that that's not live. So anytime someone checks out of your payment link, this is automated, right? So that means you're receiving it.
You don't need to worry about it. You send that payment link, they paid the text. You like you paid and you text them back and you go, I know that's how good I am. I know you paid me. I knew before, like right after you press good. You're like, I know you paid and what's cool. You can also like send yourself a text message.
You can send yourself an email to let you know you a slack message, whatever you want. You can do all that stuff. So that was how you track the initial payment. And I got a little excited there, I must say. So I'm going to, I'm going to take a breath here and kind of go into the chats either. Any questions, Joe, any questions from your end?
Joe Krug: Yes. W some,
some questions from the chat we have Edgar Antonio has same darn Airtable looks fun and it is absolutely what we just saw here was very, very. Interesting work. Very cool work, uh, understanding how this works, unlock so many other opportunities.
And then I'd love to bring up a question from Robert.
Robert is asking. Thinking along the lines of customer X paid me for 10 hours. How many of those hours have I worked for them? And how many do I still have left? So this right here, what we're looking at is a client billing base. If I were to build this, this would probably start as a client billing base and then turn into a client CRM.
Absolutely. You can manage projects here. You can manage our tracking here. You can manage. Phone calls here. You can, you know, you can manage anything about your clients and all the tables can link all to that one customer. So, Robert, what I would do here is use this setup and also have a table for hours worked and you can track, I've worked this many hours.
This was the last time I sent them an invoice. These are the remaining hours. That this client still needs to be built for. Yeah. So yeah, I would turn this into a CRM. That's how I would manage it. Yeah.
Aron Korenblit: Do we want to, do we want to like, do a really quick one? I can take like five minutes and build one really fast.
Yeah. Yeah. So, um, so every plan, um, so every plan has a number of hours, right? So number of hours, right. And then I could do a lookup. From the plan. I'm not sure I structured this perfectly for that yeah. Hours. Okay, great. All right. So Joe has 10 hours. This is like the total that I need to work. Right. So I can just create like a time-tracking table is actually going to go much faster than I thought.
I'm really proud of myself. I have to say. Um, so I'm associated to the customer. So which customer am I currently working on? Right. I'm linked to another record. I'm linking to the customer. I'd say the first person I'm working for is Joe. And then, you know, I would just take hours and then let's say, actually, I can do like a start time.
Start time, time field. I can, I started working for Joe today at 12. I'm billing you for this job just, but this is, uh, does a real. Keep it low, please. I'm sending you a payment link up to this and then end time. Um, it's going to be a time field, a date field. Yeah. Sorry. Um, include a time field. Boom. Yeah, I think I might've gotten myself into a pickle here because I'm going to start having, doing like daytime diff in hours.
I S I can still figure it out. I can still figure it out. Um, and then, you know, time, it's going to be a date. It's going to be a formula field that says daytime day. Between start, I always get these wrong. So it might be negative.
Oh, I need to put like hours. So it's giving me seconds. Right. So I just need to hours give me that in hours and I did mix them up. So it's just switched these. Okay. So I worked one hour, right. But then let's say I do like another hour. Let's just duplicate. So now I'm at two hours. What I want is I want that reflected here to have a balance of hours.
So I've already associated these two records. So there's like a timestamp there's, I've worked one hour here and I've worked another hour here. So all I need to do to create a bank of hours is roll-up. So total hours worked. We can roll up between time-tracking tape. I want to roll up the time I've spent.
And I just want the sum of those values. There's a saying some, every single hour I've worked and then I have two versus 10. So last thing I have bank of hours and it's going to be a formula field, which is the difference between, you know, uh, total number, uh, number of hours in the plan minus total hours where.
Um, so we're at eight hours left and there, you can like be really fancy. You can say when that goes to negative, they did an automation that sends you a slack message to say, Hey, I'm to send them another, you know, another payment link. Um, and then you can start tracking on that new payment link, those hours worked.
Right. So this actually scales pretty, pretty well.
Joe Krug: Um, that is really cool. Yeah. You know, some clients don't care about an itemized hourly. And they, and they actually asked, they don't want it. They just gave me the number. I'm going to pay the number. Right. Some people really want that itemized list. So when you put, I worked one hour, you can also put a description there, right?
Absolutely what it's for. And then maybe you can even add that into the email that sends them the payment link. Hey Erin, I did this, this, this, this, this itemized. Here's the total here. The description. Here's the payment link to pay for these
Aron Korenblit: services. Yeah. Okay. I've got a system. I have a more of one more last thing and a problem cell all in here.
And then I'll, I'll kind of wrap it up. So folks here, you can actually create a email digest for that client, uh, for the amount of time that you worked. Right?
So there's a thing can send a weekly email digest. So I'm just going to do this step. So at a scheduled time, find the records. So you can say, um, you know, where.
The creation date of the record was in the last week and then send an email with a let's just, um, let's see if I could test that. Will that work? Yeah. Here you go. So you can send, like, here are the two records of your work and then, um, kind of generate a preview. I got to test this test trigger and then generate a preview.
Oh, I got to go.
So you can imagine, uh, come on. Okay. Isn't it clear? We're on a stream. Got no time for the stupid stuff. Go on air table. Okay. Here. Ah,
here we go. You can say, Hey, here are the different line items for your, this one looks a little jenky. You can actually make it a little more, not instead of an HTML. Uh, go to step two records as a grid name, customer start time, end time description insert. And this let's January a preview. Yeah. You could say like, here are the two things I did for you.
I started here. I did this. Here's how much it costs you. The email will look better. Did your inbox, but that's an idea as well. So you can, every week you can send out a here's what we did for you. And here's how many hours you have left. I might be going a little too far in terms of automation. I don't recommend you like blast out every customer every week.
Like here's the itemized list of everything we've done, but, um, you can create these elevations. Um, however you want.
Now, the last thing I do want to say, we have five minutes here is that I only did one web hook. For the, in the payment received. Now the exact same process can be done for invoice paid. So if you want to track those subscriptions, so let's just quickly do this at an end point, don't like, you'll get the URL.
And then you'll, you'll have invoice invoice paid. That means that that monthly payment for Webflow hosting has passed. And then you have payment failed, which means that either they had a credit card that went in or out, sorry, went, um, you know, became lapsed or there they have no more funds, whatever.
It's just going to tell you, like, Hey, you need to follow up with this client. So you should create one for invoice paid and in another web hook for invoice payment failed. So you get each one here and with those three, you should have your three use cases covered. I've received the initial payment, I've received the followup subscription, the followup subscription failed.
Um, and those should be three separate web hooks that you're able to set up.
Yeah. Well, um, what else can I think we have four minutes. What else do folks have questions? I'm curious.
Joe Krug: I don't see any specific questions of what we can cover in four minutes. A really nice comment from Joel Whitaker. This is great.
I didn't realize how powerful payment links were. There isn't much difference from the normal stripes of scription and product flow.
Aron Korenblit: Yeah, actually it's yeah. So I think payment links is actually like, let's say. That flow, which of developer builds and just make it accessible to folks who don't write code and with a little bit of code, the little bit of, you know, here and there, you can auto create those payment links.
You can get your web hooks set up. So, um, so yeah, it's actually like harnessing the power of Stripe, which, you know, developers have been using for years and giving it to you, you know, every, every day folks like us
Joe Krug: question from Edgar. So let's say I want to try this and connect air table with Stripe. What's the best way to start from zero? Well, I would say check out our stream last week. We were on last Thursday and we went over the basics of Stripe. We walked through the platform. We didn't go into air table at all.
Aron Korenblit: Start there.
Joe Krug: Getting into air table, get into this stream. Yeah. I would say this, this would be more intermediate level. You, you would need a little bit of Airtable knowledge, and then with that you can implement a system like this. Yeah.
Aron Korenblit: And I, and I do agree. Yeah. Not only that, but I do think like too often, people automate too early.
Right. Um, They're like, oh, I need to build a CRM, the trucks time that does all this. And I'm like, you're not doing that now. Right. So what is like, I have this like pain threshold. What is like the most painful thing that you can solve easily. If that's just creating payment links for all of like, create your products, create your payment lines, send them out, manually, get payment, get comfortable with Stripe.
And then your business grows and you're like, okay, I need a CRM. That's integrated with Stripe. Then you can start having a customer table and then just tracking your customer. Don't worry about automating it. And then you're like, oh, I'm getting too many payments. I need to track all these things. Then start mirroring Stripe or tracking your payments time tracking, like really go one table at a time, one input at a time.
And then, you know, I think you'll be surprised and like six, seven months you'll be like, oh my God, like, I, I don't even go to Stripe anymore or I don't need to worry about it. I get notifications for all the right things. Um, so that's my recommendation and don't automate too much.
Cool. Okay. Well, that's awesome. I will put links in the description, uh, for the base. Uh, if you're interested in learning the code part of this, right? So we wrote a little bit of code or the script. If you're interested in learning how to write that code, join us in code meets. No-code ATT for a $50 discount.
I will be back next week with how to add a map. To, um, to Webflow actually. So how to create custom maps in Webflow, we're going to be building a kind of a database with locations for restaurants and things like that. Uh, so I'll be back then. And then I'll be, uh, Nathan, I don't know how to say that word.
I'm gonna figure it out with Jason, which is a new automation tool. And then we're back with coded the following week. So I hope to see you then Joe, as always, it was an honor, a pleasure to have you here. And I hope we do this again.
Joe Krug: We will. Thank you very much, Aaron.
Aron Korenblit: Thanks so much. Okay. Thanks to everyone for joining.
I hope to see you next week. Hope to see you in code meets no-code and all the different automate all the things, stuff. It was a pleasure. Thanks again. And I will see you back next week. Bye out by Joe. Have a great day.