Issue with Router + platform completion logic in Make

:bullseye: What is your goal?

I want to reliably determine whether a post is complete after a Router with multiple platform routes.

The intended logic is:

If a platform is not active, it is considered complete.

If a platform is active, its corresponding *_done value in Google Sheets must be TRUE.

Only when all active platforms are complete:

the post status may be set to complete

the scenario may proceed to the next post.

Google Sheets should be the single source of truth.

:thinking: What is the problem?

After the Router, it is not possible to reliably determine whether all active routes have completed successfully.

Specifically:

Router branches do not block each other when one route fails.

A failing route (e.g. Facebook Buffer error) does not prevent the scenario from continuing.

Checks using Set Variable or filters after the Router can evaluate to TRUE even when:

a platform is active

but its *_done value is empty or FALSE.

As a result, posts can be marked as complete even though an active platform has failed.

:test_tube: What have you tried so far?

Using Set Variable (e.g. all_complete) with logical expressions combining *_active and *_done.

Using filters after the Router to evaluate platform completion.

Using error handlers on platform routes.

None of these approaches reliably prevent a post from being marked as complete when one of the active router routes fails.

I added how the set variable is looking at the router…

Pardon me for the english.. I used chatgpt for the translate. I’m also very new with Make i have been using it for around 3 weeks now. I came a long way but this piece is getting me for about 3 days now. So i hope you guys can help a little. I shared the scenario check link. Also 2 pictures in attachment.

And just to verify.. The location of the dropbox, move file right now. Is only to solve the fact that it keep getting the same picture. When the problem is fixed with the router this dropbox move a file should switch to another place…

Thanks in advance!

:link: Create public scenario page

:camera_with_flash: Screenshots: scenario setup, module configuration, errors


1 Like

Welcome to the Make community!

You do NOT put double quotes in the formulas unless you want them to be included to be matched/compared with as well.

Hope this helps! If you are still having trouble, please provide more details.

— @samliew
P.S.: investing some effort into the tutorials in the Make Academy will save you lots of time and frustration using Make!

1 Like

Thank you for the quick response, and I’ll take a proper look at the Make Academy at my own pace. We can only get smarter from that.

Even if I remove the quotation marks, it still keeps returning false, while it really should return true here (when I enable only the Instagram route and the scenario finishes successfully).

After spending about ±4 hours working on this with ChatGPT, I’m honestly a bit out of ideas myself haha.

I’ve already been working on the code. At the moment it uses !=, but I’ve also tried =—unfortunately without the desired result. I’m also not entirely sure whether using Set Variable is the best option in this case, or if you might recommend a different approach. I’m definitely open to suggestions.

I’ve added a few screenshots showing what the sheets look like. Maybe there’s some additional information to be found there.

Hopefully you’ll have an answer.
Thanks in advance for your help!

1 Like

Are the values you are checking supposed to be TRUE the text string or {{true}} the Boolean operator?

Thanks for your time.

The instagram_actief field is a checkbox. You can turn it on or off in Google Sheets (I’m not sure whether this is treated as text or as a boolean).

The value that insta_done receives is updated by Google Sheets. Because of that, I assume this should simply be text.

Sorry if I can’t explain it much better — this is all fairly new to me

1 Like

You can hover over the variable to check it’s type, if I remember correctly check boxes should be Booleans, so you may need to change your formula accordingly.

I found a small mistake in my scenario: my Tools → Set variable was still using a Search Rows module from earlier in the scenario. After fixing that, I expected everything to work correctly. Unfortunately, that was not the case.

At this point, the formula itself seems correct (I can validate that later). The real problem appears to be the interaction between Google Sheets → Search Rows and Tools → Set variable within the same scenario run.

What happens:

  • If only Instagram is active and insta_done = TRUE, the Set Variable correctly evaluates to TRUE.

  • When I also activate Facebook:

    • The Facebook route runs successfully

    • fb_done is correctly updated to TRUE in Google Sheets

  • However:

    • The Search Rows module used before Set Variable does not pick up this TRUE value

    • It still returns FALSE for fb_done

    • As a result, the Set Variable evaluates incorrectly

So even though:

  • The Google Sheet clearly shows fb_done = TRUE

  • And the Facebook route has already completed

…the Search Rows module seems to still read the old value.

I’ve seen suggestions (including from ChatGPT) that this is a known Make behavior, where Search Rows can return data from an earlier state in the same scenario execution, even if an Update Row happened earlier.

Additional context:

  • Execution order of the scenario is:

    1. Facebook route

    2. Instagram route

    3. Google Sheets (Search Rows) + Set Variable

  • I am searching by row number, so it should always read the same row.

  • Despite this, the latest updates are not consistently reflected.

Question:

Is this a known limitation of Google Sheets modules in Make?
And is there a recommended way to reliably evaluate updated Sheet values within the same scenario run, without running into stale data?

I’ve attached screenshots showing:

  • The value being TRUE in Google Sheets

  • The Search Rows output still showing FALSE

Any tips or best practices would be greatly appreciated.

true

sheets

1 Like

Are you sure you are using the Search Rows module from the last branch of the Router?
This is not supposed to happen. If you are searching again after the update, the result should be correct (TRUE).

Don’t trust ChatGPT for Make. It usually makes up “known behaviors”.

EDIT:

I don’t speak Dutch, but from what I understood, you are getting active companies, then searching for company details, then appending a new entry to the posts queue for that company. Then you try to work on that post. Is that so?

Module 200 poses a threat to your logic, as well as module 201. You query the queue again in these modules, after inserting the new entry, but you only filter by company and limits the result to 1. If you do not clean the queue, it won’t necessarily return the entry you just inserted. It’s going to return the first row it finds for that company in the queue, in some order.

The Add row module returns the row number, just use it from that point on. You don’t need to Search Rows again, unless you need some value that Google Sheets calculates itself. If so, use the correct filters to uniquely identify that record when searching for it.

In your last Search Rows module (201), the same happens. Check the whole record in the module output by some unique field from the queue list and make sure you are receiving the correct row.

@damato

What you’re saying is indeed correct.
What started as a small idea has grown a bit into: how can I maybe make this run for a few friends as well (who have their own businesses).

So it indeed starts with the Planning sheet. This sheet contains the companies, and based on which ones are active, the scenario should run.

In this flow I have an ADD row. This essentially creates a row in Sheets. It’s already there so I can later log any potential errors, etc., and to log existing data.

A few days ago I was working in a different way and was retrieving information from rows, which is why I thought I needed the Search row.
For now, I removed 200 from my list.
And I left 201 as it is…

What you’re saying — that it’s actually looking at a company name and not at the row number — is correct. If I look at the date of the post that gets picked up, it’s always the first row, not the last one.

Now you say that in principle the row number alone should be sufficient, and I can also retrieve that. But how would I need to configure this in Search rows? Or should I be using a completely different module for this?

I’ll send a screenshot of how my Search row is currently set up.
I can indeed see myself that it’s wrong — but what the proper solution is to log this definitively, and where and how I should store the row number, is something I’d really love to hear.

Thanks a lot for thinking along with me so far — it’s been really helpful, and I’m glad I’ve at least found something!

1 Like

I understand that you are using the google sheet as a database and that the update to facebook, instagram etc. can go wrong, so you need to check it on the last branch. Is this correct? There are a number of ways to get the last state of each record in the queue.

Since you are adding the rows to the queue one by one on (198), I’ll assume that each branch executes only once for each post in the queue. Thus, you can simply use the variable fb_done on the last branch. Indeed, if your FB Buffer module (12) errors, your Break directive will be triggered and the scenario will stop. If you set it to retry after N minutes, it will try to resume the flow from FB Buffer on. If what you really want is to skip the fb branch in the case of an error and re-execute it only on the next scheduled run of the scenario, just ignore the error and set fb_done to FALSE in that case.

Then, on the last branch, use a Get (Multiple) Variables to retrieve the value of fb_done instead of reading the google sheet again. That way you’ll have consistency on your google sheet, but without depending on it on the last mile.

If you absolutely need to get the row from the google sheet, use something like Get Range Values module (instead of 201) with the row number:

A{{198.`__ROW_NUMBER__`}}:Z{{198.`__ROW_NUMBER__`}}

I believe this is cumbersome and unnecessary.

You don’t need to store it. It’s available everywhere in your scenario, just by referencing the correct module (unless the module is part of an aggregation).

@damato

Wow, it works!
Nevertheless, I still have a small question about something you also mentioned.

When I try to use Get (Multiple) Variables, I run into the problem that this module can’t find fb_done and insta_done in the list. According to ChatGPT, this is because they are in the same router, but not in the same route. That’s why, apparently, it should work this way using Google Sheets.

Whether that’s really true, you probably know much better than I do—but I personally couldn’t find fb_done and insta_done (the variables that come after the Buffer modules).

What I’ve done now is remove the 201 Search Rows module. I replaced it with the Get Range Values module and filled it in exactly the way you suggested. And it works fantastically! I immediately tested it with multiple routes, and it works perfectly as expected.

Thanks a lot for this! Now I can let the route run and fine-tune things a bit later on.

1 Like

Glad to know it worked!

Variables set by “Set Variable” don’t show up like other properties from modules. You just write the same name you used to create the variable in the Get Variable module:

Please start a new topic if you have further questions.

Al the best.

@damato

1 Like