Chaining multiple flows

I am trying to link Airtable to Webflow. In order to bring my Airtable relationships over to Webflow, there is a certain set of operations I have to do this:

  • Send Airtable rows to Webflow, and store airtable record id
  • Send those newly created Webflow id’s, back to same Airtable table
  • Send a second Airtable table to Webflow, but this time linking a relation by doing a lookup of the Webflow id in Airtable

My questions are:

  1. Is this the right strategy?
  2. Can I do this in a single run? I am not aware how Parabola handles asynchronous calls
  3. Can I chain multiple ‘Flows’ together? There is a “Run Parabola Flow” component, but I can’t ‘trigger’ it by either
    a. Starting it after a “Send to Airtable/Webflow” step or
    b. Putting it at the beginning of a flow, and then waiting for it to finish, and then trigging the “Pull from Airtable/Webflow” step

Any advice is greatly appreciated!

cc @Adam_R

Hi @ianjanicki :wave:

Happy to help! To accomplish this use case, we can use two flows and set chain them together using a Run another Parabola flow step or using an Orchestrator flow. Here’s how I would set this up:

Flow 1

Create new Collection Items in Webflow with Airtable's Record Id and sync newly generated Webflow Ids back to Airtable.

To set this up, pull in your Airtable base and filter out records that do not contain a Webflow Item Id. You can then use an Enrich with an API step to configure a POST request and create new collection items. The benefit to using this step is that you’ll receive a response from Webflow containing the Item Ids. You can then map that column back to the related Airtable field.

You’ll notice the Send to an API step is included as well. While our native export steps prohibit you from plugging in additional steps, the Send to an API step could be used to send data back to Airtable and trigger your next flow.

The downside to this is you will need to configure your API requests, so I recommend sticking with the Send to Airtable step as your final output.

Flow 2

Import all collection items from Webflow and recently updated records from Airtable. Combine your dataset on a shared Webflow Item Id to merge and send back to webflow

Orchestrator Flow

Orchestrate your flows to ensure they are sequenced in order.

This method involves creating a separate flow of just Run another Parabola flow steps. The first step could trigger Flow 1. Once that flow completes, the second step will run Flow 2. Just be sure that your scheduling rule is only set on this flow.

Let me know if that helps!

Thanks @daniel. I appreciate the thorough post and I think I grok most of it. But have some small follow-ups for clarification.

In “Flow 1”, what are we doing with the Enrich API? Are we pushing all the desired fields from an Airtable row or just a placeholder to grab Webflow Item Ids so we can send back to Airtable? It seemed like we are duplicating efforts in “Flow 2” via “Send to Webflow” — didn’t we just do that via API above? Not sure if you were suggesting 2 options between Flow 1 and Flow 2 or if both were necessary.
2. Orchestrator flow is super-helpful!
3. How would you recommend having click-to-sync workflow? Can I kick off that orchestrator row remotely via webhook?

Also. One frustrating nit: If you have a new column with no values in any of the rows, your API will not pull it! So if you’re starting a new table, you have to put dummy text in one row or else it wont pull the column at all.

Hi @ianjanicki,

Glad this was helpful! Happy to answer some of your follow-up questions.

In Flow 1, the Enrich with an API step is used to post new collection items to Webflow that exist in Airtable. You would want to push all fields from Airtable to Webflow. The benefit here is that once the collection items have been created, the API will return their Item Ids in the response. We can sync those back to Airtable in the same flow.

In Flow 2, my understanding is that the initial Pull from Webflow step is a separate collection that contains a reference field linking to the collection from Flow 1.

Let me know if I’m I’m understanding your setup correctly, and if you can provide more context on the “second Airtable table”. There may be a possibility you can do this in a single flow if you set it up like this:

Kicking off the orchestrator flow using a webhook could certainly work. If you have access to webhooks on your account, head to your Live view to generate a webhook URL. Anytime a request is sent to that webhook, the flow will trigger.

Ok. Perfect. Thank you for clarifying! I didn’t you know you were actually solving both of my problems in one flow! :+1:

1 Like

@daniel Got a MVP up and running but curious if there’s a more efficient way of doing this.

Here’s the ‘schema’. 3 types of tables. 2 arrows represent multi-reference. Records A, B, & C are constantly growing in numbers and are not static.

I haven’t figured out a clever way to do this in 1 run (and not sure it’s possible). I also wanted to have an ‘update Item, don’t create Item if webflow id exists’ due to growing list.

I achieved it like so:

But if I want to do the same for all 3 tables, how do I connect them? It’s an order-of-operations race-condition. My thinking is as follows:

  1. Create/update recordsA
  2. Create/update recordsB
  3. Create/update recordsC
  4. Pull records from recordsA, recordsB, recordsC into 2 ‘combine tables’ and update each webflow collection with reference & multi-relations.
  5. Run previous 4 steps in orchestrator flow

Let me know if this is grossly inefficient!

Nice job, @ianjanicki. Glad to see you’ve got an MVP working!

Since recordsC requires data from recordsB and recordsC requires data from recordsB, the best option in my opinion is to use an orchestrator flow to run steps 1-4.

If you wanted to accomplish this in a single flow, swap out most Send to Webflow and Send to Airtable integrations and for “Enrich with an API” steps. This will ensure an API request is made after the previous step runs.

Here’s an example of what that flow could look like:

  1. Start by pulling in recordsA from Airtable and update/create collection items in Webflow using the Enrich with an API step.

  2. “Stack tables” to create a full list of all collection items associated with recordsA.

  3. Import the recordsB table from Airtable.

  4. Combine them with your recordsA collection items. Note: This will merge in the fields from recordsA so you can update/create your recordsB collection items with the correct reference field.

  5. Stack your tables once more to create a full list of all collection items associated with recordsB.

  6. To resync some data back to your recordsA collection, use the “Send to Webflow” step to create a branch to update those items.

  7. Rinse and repeat for recordsC by merging in recordsB data before updating/creating those collection items.

  8. Finally, you can update a previous collection with reference fields from the recordsC. You’ll also be able to sync all of the fields back to Airtable towards the end.

Feel free to paste this snippet into your flow to duplicate the framework shown above:

Still, I recommend splitting these using an orchestrator flow since you won’t be making as many API calls using the Enrich with an API step. It’s also easier to manage each step of the process when they are broken down into individual parts.

Let me know if this helps at all! Curious to see what you’re able to build. :muscle:

Amazing! Thank you for putting that together.

One non-Parabola question: Webflow denies you to delete records when other records are pointing a relation to it. As I modify/build out schema. I often delete all the records and just sync fresh again. Do you know of any work-around here?

No problem, @ianjanicki. Hope that helps!

To get around this limitation, it seems like the relationship must be removed before deleting. In that case, I would recommend using a “Send with an API step” to PATCH in blank values for those reference fields.

Once those references are deleted, you can use a “Send to Webflow” step to delete those collection items.

Let me know if that works. :slight_smile: