This article is part of the Alteryx Obscura Blog series. Alteryx Obscura is the Inspire session dedicated to all things non-analytics, highlighting what the software “can” do rather than what it’s “supposed” to do.
In between bouts of uncontrollable sobbing at the sound of a baby crying (IYKYK), I had the tremendous honor this past May of presenting the second-most mom-coded Obscura project to ever grace the Inspire breakout stage: Plan to Alteryx!
Microsoft Copilot has generously suggested that my deck “delved into various aspects of leveraging Alteryx for data-driven decision-making and enhancing business processes,” and I suppose that is accurate insofar as I take the business of making dinner for my family very seriously. I use an immensely helpful tool called Plan to Eat, which combines recipes, grocery lists, and menu plans that everyone can access—but these efficiencies were not enough for me, a Type A Superparent prone to hyperfocus. I needed more.
The Central Problem
It’s easy to get stuck in a dinner rut, especially when you’re trying to integrate complex factors into an on-the-fly decision that somehow must be made 13 minutes before you meant to start cooking. But what if you had a robust dataset that enabled you to delegate that choice to a machine? At its core, there are three main considerations:
- What’s in the fridge? Is it expiring? Has it already expired? Ew, time to chuck that one . . .
- What won’t they eat? Why does this kid want chickpeas and shrimp but refuse to eat mashed potatoes? Can I sneak something green into this sauce? Okay, so if I can’t use that ingredient, what are my remaining options?
- Are we all bored of it? Am I bored of cooking it? Can I even stand to look at it anymore?
Happily, Plan to Eat can quantify, organize, and filter for all these criteria... but only manually, one meal at a time.
Source: GIPHY
The Grocery Store
I had already invested countless hours in tagging, rating, and categorizing my dinner recipes, so the metadata was strong and standardized. Sadly, it turns out that there is no magic download button to pull the complete details from Plan to Eat into, say, a tidy little CSV. How disappointing! I would have to scrape the site using my login credentials.
Surely, I thought, I can use Python for this. But it turns out I am Too Extremely Novice at Python for this, even though I am aware that data scraping is an incredibly basic use case, and so I bravely proceeded to hope that another user had met with and conquered a similar challenge.
Happily for me, the gracious and talented @AkimasaKajitani had precisely the tool I needed! I added in a few bells and whistles of my own, since the volume of data I was trying to retrieve hit some limits on server timeouts:
- Iterator to batch retrieval jobs

- Nested iterative macro to limit server timeouts
If this looks “too simple” to solve the server timeouts entirely, you are correct; however, using this method, I was able to scrape the source code for about 200 recipes (previous timeouts were capping this number around . . . 5?), and this proved a sufficient volume of data to proceed with the next step!
The Mise en Place
Now it was time to prepare and blend what I had scraped—set the data mis en place, if you will. In addition to the recipes themselves, I did a manual scrape to pull a table that gave me some added data points, which I parsed in the main app:
- data_rating: After I make a meal, the family votes on how many stars to award it (out of a possible 5, although some dishes have been so popular there have been requests to rate them “ONE ZILLION”).
- planned: Plan to Eat logs every time I put a recipe on my menu schedule!
- recipe_title and recipe_photo: Recipe name and URL of the image associated with the recipe; self-explanatory.
- taxonomy_tags: Self-assigned tags that characterize the recipe as a soup, a stew, a cake, vegan, vegetarian, etc.
- meatless: Boolean that determines whether a recipe can be used on a designated “meatless” day, like Meatless Monday.

Then, I pulled together a list of the ingredients in the recipes I had scraped and did some manual categorization by key attributes:

Blending these two tables with my recipe database yields a parsed, scored, and flagged table that’s ready for selection—let’s cook!

Just Add Heat
Once everything is chopped and simmering in the pot, it’s time to take it easy and let Plan to Alteryx make the tough choices. Because no recipe ever turns out the same way twice, a random integer helps prevent the workflow from producing identical results even when the criteria remain unchanged on consecutive runs.

Sprinkling in a few Interface tools turned this standard workflow into an app that allows the user to input those three criteria that I named up at the top:

Plating and Serving
But you can’t just dump a bunch of spaghetti on the table, right? The last secret step is a little more Download tool and a lot of Reporting to produce a menu worthy of the ‘gram:

Back to the Test Kitchen
The version of Plan to Alteryx that I presented at Inspire 2025 was the one I could cook up in time for the conference, but no recipe is safe from tinkering! What will be in the next version? Here’s a wish list:
- Improved scraping: I refuse to be defeated by Python.
- Solving for repeats: There are still instances where the same recipe pops up in an extended menu plan, and we can’t have that, can we?
- Dynamic metadata analysis: Automate all the things!
- Exportable grocery lists: Either a full push to Instacart (!) or just a printable list you can take to the store.
Tips & Tricks to Take Home
I love to build analytic apps to delight end users with the simplicity and ease that Alteryx can provide. But testing them is often labor-intensive and slow, especially when debugging must be done in a separate workflow window! To streamline the update of test variables, I like to use Workflow Constants:

By entering values in the Workflow tab of the Configuration panel, I can call these variables in many places on the canvas. This allows me to use the standard workflow Run functionality to test the impact on my analytic app! Prior to developing Plan to Alteryx, I’d used them in Formula, Input Data, and Output Data tools to create dynamic file paths:


In these implementations, the Interface tools don’t even require Action tools to connect! For Plan to Alteryx, however, I had to get a little more creative and include an Update Value to get it working on:
- Text Input
- Generate Rows


Once I got this set up, I was able to test dozens of inputs with a mere Control-R! If you’d like to try out the more basic use cases, I have a sample workflow below that can illustrate this in more detail.
Conclusion
Even exploring the edges of what has been done, the Alteryx Community comes through over and over with reusable solutions to pieces of just about any problem. Also, I can automate some pretty wild stuff, but at the end of the day, there’s no substitute for time spent at the table as a family! Here’s some steak:
