Learning French with Lingvist by using Quantified Self Apps Beeminder, Zapier and Exist Custom Attributes

In my last post, I described how to use Beeminder to ensure daily use of the Exist app with a Zapier integration. Now I will expand on that to show you how you can target specific behavioral changes by using these tools. Exist has a cool function called custom tags that allows you to add specific activities that you have done that day. It is able to use those tags in its Insights and Correlation products to help you understand how your behaviors affect one another. By understanding more about yourself, you can hopefully modify your behavior to get the results you want in life.

Yeah, Facebook is where productivity goes to die…

Exist Custom Tags

These attributes are very simple to use. Simply find the “Edit Tags” option in the Exist web or phone app and add the behavior you want to track after you have done the task. Exist will then add that tag in the future in a simple to click list that stays updated with the most commonly used tags. It begins to perform analysis of these tags and eventually can give you insights like the one I shared above.

Find the Edit Tags option here
Add the Custom Tag here

Picking a French App

This system is independent of whatever app you are using to learn french. Some apps, like Duolingo, actually have great APIs and great integrations with Beeminder out of the box. However 99% of them, don’t have any APIs or integrations. So if you like to do multimodal learning like me, Exist is one of the few ways I’ve found that allows me to track progress regardless of where I’ve done the learning that day.

Personally, I’ve been really enjoying using Lingvist for my French vocabulary learning. It presents a sentence with a hole to fill in and an English word you are looking to translate. After, a native speaker pronounces the sentence so you can learn and understand pronunciation. They have the top 5000 words by usage in the language and by using it I’ve been able to get several thousand words and it definitely has accelerated my learning. The app goals are 100 cards a day with 20 new words and one “challenge” which is a small grammar lesson. It is what took me a bit farther after I finished the Duolingo tree.

Want to buy an “x”…

But like most apps, it has no API so I need to use Exist to track my usage.

Hooking it up to Beeminder with Zapier

To ensure my usage, I wanted to hook up my “french” tag in Exist that I enter after my training into Beeminder to keep me honest. All of the information from my previous post applies here, especially getting your API keys and how we go about setting up the integration. So make sure to check that out. I’m going to assume you have your API key, have your accounts created, and things like that.

Firstly, we will set up a Timer Trigger. Something I’ve found about the Zapier API since my last post is that while they claim to check every 15 minutes, they actually seem to only check once an hour. Hopefully they will fix this soon but for now, you may want to set it to check at 11pm instead of 11:45 to ensure you hit your Beeminder cutoff of midnight.

After that, we use the Code flow again to get the tags from Exist. For this, we will need to parse down into the Exist data structures that their API returns in order to find the tags entered for the day. While their API documentation says this will be returned as values tagged 1, this is not actually correct and you have to parse it out of the attribute “custom”. Make sure to add your API Token here. I’m also using the convenience helper value of $self in the URL so you don’t have to enter your username. The code you enter in the “Edit Template” follows.

var exist_behavior = "french";
fetch('https://exist.io/api/1/users/\$self/attributes/'+ exist_behavior +'/',
{ headers: {"Authorization": "Token YOUR_API_TOKEN"} })
.then(function(res) {
return res.json();
}).then(function(json) {
// put the top result in a variable
var behavior = json.results[0];
// Check if the result is 1
callback(null, { result: behavior.value === 1 });

Another thing to note here is the variable I’ve named exist_behavior. This string needs to match exactly with the string you’ve entered into Exist. It also what you would change if you wanted to track a different tag than learning French. Just match up what you want to push to Beeminder with the tag you actually care about. The code is general enough to find it in the Exist API call. Use the Test functionality of Zapier on this integration step to ensure you are getting the values you expect.

Now we will filter the result to ensure the value is there and post it to Beeminder to finish our integration. Firstly, make sure you go to Beeminder and add the goal for this integration. If you don’t do that first, you won’t be able to hook up the final step. I personally set up a 6 days of training per week goal for French to give me a cheat day. Create the filter on the “If Result is True” and add the New Beeminder Datapoint action and you are done with this step.


And that’s it! Now Zapier will check every day to see if you have done the tasks that you set goals for yourself for. If you don’t enter the data, you’l get stung so remember to enter your Custom Tags in Exist. This dovetails nicely with the “use Exist daily” goal from my last article as now you have 2 incentives to make sure that you use it. By tracking your behaviors and setting strict goals, you position yourself better to avoid slacking off and achieving what you want to achieve!

Je vous remercie d’avoir lu cet article!

Edit: I have added some information around the integration and changed some of the Exist branding. =)