This page shows you the baby stats tracks/counts per day, it's a summary of the diapers/feedings you have tracked. When you first open Baby Stats you won't see any data since you haven't tracked anything yet. Once you click one of the buttons to track a stat in, you can see each individual baby stats count. As soon as you press a button the baby stats count will be tracked and be able to be seen on any device (Android, Alexa etc..).
On the main page you have multiple options in the "..." on the top right of the baby stats main screen. One of the options is the "Counts" page to view each individual baby stats count you have tracked. These counts will be tracked on all devices.
Baby Stats lets you share your babies counts so they can be tracked on all of your devices. Use the ID generated on the Baby Stats mobile apps, or the Alexa skill, to link the devices together.
The Baby Stats Alexa skill makes it really easy to track baby stats at home, with just your voice. Say Alexa, ask baby stats to add poop and it will sync across any device using the same ID. Make sure to say Alexa, ask baby stats to get ID, and enter the ID into your mobile app.
The Baby Stats online viewer can be used to supplement your Alexa Skill, or for use on your computer.
For every conversation with the Google Home, it attempts to match your voice with a Google Account stored on the device. If there is no trained voice on the device or if there is at least 1 voice trained on the device and its not your voice, it treats you as a stranger. If your device is treating you as a stranger it will appear to Baby Stats that you are a new account every time you speak to Baby Stats. This isn't something I can fix on my side unfortunately. It requires configuration on the device itself. If you want more information on Voice Matching click this link https://support.google.com/assistant/answer/9071681 Likely what is happening is the device is treating you as a stranger.
Ok, so now you know what the issue is. The high level explanation to fix is to configure your account, train your voice using the Google Home app on your phone. Then use the set ID command within Baby Stats to link all the accounts on your Google Home. Data Sharing. Below will give you more in depth steps to configure it.
Step 1: Ensure the main/default account is configured on the Google Home and that persons voice is trained on the device. You can do this from inside the Google Home mobile app. Open the Google Home app, then follow the steps to add a new account to the device (if it's not already) and train your voice as well. Once you have configured your account and your voice on the account Baby Stats will remember you. You can check by saying "Ok Google, talk to baby stats to get ID" twice and ensure it's the same value. Again, ensure you are using the Google Home app (not Baby Stats). This is a device configuration.
Step 2: Invite anyone else. Return to the Google Home app. Then "Invite others who your your devices". Once you complete the registration process on the device and enable voice matching for the second user, Baby Stats will remember them too. HOWEVER... You now have 2 Baby Stats accounts on the device. Step 3 will explain how to link those accounts together.
Step 3: Link all your Baby Stats accounts together. On the main/default account, say "Ok Google, talk to baby stats to get ID." this request will return to you an identifier that us your unique account numnber for Baby Stats. Open up the Google Assitant on the second account (it's easiest to use their phone and type) "Ok Google, talk to baby stats to set ID ####", where #### is the unique ID from the main account. More information on data sharing is here. Data Sharing.
You should be all set now with multiple accounts on the device, and all of them are now linked together within Baby Stats. There is no more configuration you need to do, unless you need to add another account. If you need another account setup, do Step 2 and 3 again.
There are other, less likely reasons Baby Stats doesn't remember you. If you read above and you still need help, go to our Facebook Page or Twitter and you can chat directly with me and we can work through it. Links here: Facebook Page, or
When you use Baby Stats you are assigned a unique ID. This is your username. With all of the privacy issues happening around the world, we have taken the approach that we will not store ANYTHING private to you. Because of this, we automatically generate a username (of all numbers) for you. We take your privacy very seriously and will never be able to market anything to you because of it.
In most cases parents are using Baby Stats because of Alexa, Google Assistant or Cortana, it's the most efficient way to track stats for your baby. If you are using a voice assistant say "ask baby stats to get id", and enter that ID value into the mobile app.
If you want to use Baby Stats as a stand alone application. You are welcome to, click the Generate an ID for me below. If you are using Alexa, Google Assistant or Cortana, it is recommended to "ask baby stats to get id". You can set the ID on the device but it is easier to use the ID assigned to you on the voice assistant rather than generating your own.
If you want to share one account with other devices or other platforms, you can Set the ID of whatever device you are using. This allows you to track your stats on any device using the same account. You could track stats on Alexa at home, Google Assistant on the go, or Cortana if you're browsing the web. You can link all those accounts by:
Step 1: Identify which device is your "master" device, and ask Baby Stats to get ID, for that device.
Step 2: Take that ID and set it on any other device by saying, ask baby stats to set ID {the ID numbers in sequence} (so if the ID was 12345 you'd say "one two three four five")
NOTE: There is a confirmation and easy way to restore the old ID. Don't be afraid of messing it up, it may take a couple tries as you have to speak quickly. If the platform allows for typing that is recommended/easier.
Below is a picture showing you how to share data.
You can now count stats with multiple babies on Baby Stats. Enter your ID below, then follow the steps to convert your account to allow multiple babies. NOTE: If you do not need to use multiple babies, there's no reason to do this. Just skip this step.
When you configure for multiple babies, each baby will get their own unique ID/account that can be used independently, or can be used from you main master ID/account. In the mobile app and online viewer it will allow you to toggle between them.
In most cases you should not need to care about the baby's ID, as you can track against any baby using your main account.
Now that you understand the way your account is linked to the baby's account. Below is an explanation of the fields specific to multiple babies.
1. Spoken Name allows you to nickname the baby. Baby Stats will use fuzzy matching to try to find the correct baby based on what you have said, but in case your baby has a name that is difficult for Alexa/Google to understand you can use this field to specify what Alexa/Google should be listening for instead of the actual name (or maybe a nickname that Alexa/Google do understand.)
2. Display name is what is displayed and repeated back to you.
3. ID is auto generated for the baby. This is similar to your ID, it can be treated as a specific account on it's own if you need/want to.
4. Is Default is a way to track stats without specifying the name of the baby. If you do not specify a name, it will track stats against this baby.
Ok. Now that you know the basics. How do you do it?
Below you will see a button which allows you to convert your account to allow for multiple babys. Once you have done that the Online Viewer will show you all your babies and allow you to manage them.
The basic outline is you say "for {spoken name}" at the end of any of the normal phrases.
You can now integrate directly with IFTTT. You can configure which stats you subscribe to and everytime that stat is triggered you can have it kick off some action on IFTTT. Want to have it log a stat every time to Google Drive? Want to start tracking sleep every time you turn off the lights in the babies room? Maybe you just want to change the light color everytime you change a diaper? The power is in your hands.
1. Enter your ID below, then click Load ID Information
2. Next enter your IFTTT key. If you have previously subscribed it would have auto populated when you clicked Load ID Information. Help finding your IFTTT key
3. Next, highlight the events on the left and click Add Subscription for all of the subscriptions you want IFTTT to listen for.
4. Now save your subscriptions. This will update Baby Stats with the events you want IFTTT to know about. Next you will need to configure IFTTT.
5. Navigate to IFTTT and click on "New Applet".
6. Select "Webhooks" and Receive a web request.
7. Enter the event name of one of the subscriptions you subscribed to above.
8. Choose your "action", in this example you'll see how to create a Google Sheets.
9. You should be good to go now!
To find your key login to IFTTT and navigate to Webhooks and click on Settings.
You will see a URL. You can copy the whole URL and paste it into the text box, we will strip out all the URL parts for you.
NOTE: Be aware, if you use this with the other IFTTT integration, you could get yourself into an infinite loop of funness.
QUOTA: There is a quota allowed per ID or Access Token. The current quota is 50 requests in a 5 minute time period. If you exceed that quota your account will be banned from the public API automatically. If you need additional quota, please reach out to us at support@babystats.org.
We have opened up a public API that can be used by your own home automation projects, or can be used by IFTTT web hooks. In order to use this API, click the button below to generate an "accessToken". This token needs to be supplied with every request or we will reject your request. Ensure you save this token for use later.
If you are not technical, don't worry below that will show you how to get the data into IFTTT. Just fill in the "YOUR ACCESSS TOKEN GOES HERE" (if you don't have an access token click Generate Access Token) and enter your ID in the "YOUR ID GOES HERE".
Toggle the drop down below to see the Body data required for each request type.
Parameter | Description | Type |
---|---|---|
isApplication | This tells the api whether return a BabyData object (documented below) or SSML. If you pass true you'll receive BabyData, if you pass false you'll receive SSML. | boolean |
onlyHeader | This tells the API whether or not you want BabyTransaction data. It's best to set this to true. | boolean |
numberOfDays | This limits the number of days that get returned in BabyCount data. Our online viewer only returns 5 days for example. | integer |
A request that adds a wet diaper, then tells the API to return SSML.
{
"id": "FAKE",
"accessToken": "2019-08-19:d0a58739-ee99-44c8-ad28-d099273aa6f3",
"event": "AddWet",
"babyName" : "",
"eventTime" : ""
}
A request that adds a wet diaper, then tells the API to return BabyData, but limits it to 5 days and only returns the BabyCount data (not BabyTransaction).
{
"id": "FAKE",
"accessToken": "2019-08-19:d0a58739-ee99-44c8-ad28-d099273aa6f3",
"event": "AddWet",
"babyName" : "",
"eventTime" : "",
"isApplication":true,
"onlyHeader":true,
"numberOfDays":5
}
In order to use our public API with IFTTT follow these steps. If you are not planning on using IFTTT you can skip lower.
{
"status": true,
"statusMessage": "",
"ssml": "",
"data": {
"ifttt": null,
"lastStats": { },
"lastNStats": { },
"countsInTheLast": {
"hours24": { },
"hours12": { },
"hours6": { },
"hours1": { }
},
"dueDate": "2018-07-02",
"deletedBabies": [],
"babies": [],
"seenThings": [ ],
"previous": [ ],
"guid": "string",
"id": "string",
"timezone": "unknown",
"babystats": [ ],
"transactions": [ ],
"weights": [ ],
"notes": [ ],
"sleep": [ ],
"pumping": [ ],
"kick": [ ],
"startSleep": {},
"startFeeding": {},
"uom": "ml",
"uomType": "us"
}
}
Parameter | Description | Type |
---|---|---|
status | The status of the request (true or false). | boolean |
statusMessage | An error message. This will be populated when the request fails to give you information on why it failed. | string |
ssml | If the request had the isApplication=false, then this will be populated with SSML based on the request. | string |
data | This is the start of the BabyData object. | object |
data.ifttt | This will be populated with the IFTTT url used by the user. All public requests will have this value nulled out. | string |
data.lastStats |
lastStats will have the last babyTransaction that was tracked for each stat type. For example, if you tracked an AddWet. You will see: "lastStats":{ "AddWet" { babyTransaction } } Then when you tracked an AddFeeding you would see: "lastStats": { "AddFeeding": { babyTransaction }, "AddWet": { babyTransaction } } The last count tracked by each type will be stored here. This makes it easier for the viewer to get the last stat for display. |
name value pair of babyTransaction |
data.lastNStats |
lastNStats will have the last 10 babyTransaction that was tracked for each stat type. For example, if you tracked an AddWet. You will see: "lastNStats":{ "AddWet" [ { babyTransaction }, { babyTransaction }, ... ] } Then when you tracked an AddFeeding you would see: "lastNStats": { "AddFeeding": [ { babyTransaction }, { babyTransaction }, ... ] "AddWet": [ { babyTransaction }, { babyTransaction }, ... ] } The last count tracked by each type will be stored here. This makes it easier for the viewer to get the last stat for display. |
name value pair of an array of babyTransaction |
data.countsInTheLast | countsInTheLast will be a pre-calculated the number of stats that occurred in 4 different durations, hours24, hours12, hours6 and hours1. The type of the data will be an aggregate babyCount. | babyCount |
data.dueDate | The dueDate tracked by the user. | date |
data.deletedBabies | Deleted babies are never truely deleted. We just move the baby from the babies array to the deletedBabies array in case it needs to be reverted. | array of baby |
data.babies | The list of babies. This is ONLY used if the user has converted their account to allow for multiple babies. In 90% of instances it is not used. | array of baby |
data.seenThings | This is not needed for you. I use this internally so I can track if a user saw a particular screen so I can tailor the message. | array of seenThings |
data.previous | This is the last count operation that was done. I use it internally for the RemovePrevious transaction (IE "undo"). | array of babyTransaction |
data.guid | guid is a unique GUID generated for the user. It is only used internally and doesn't mean anything to you externally. | string |
data.id | id is the unique ID that is exposed externally for the user. | string |
data.timezone | timezone is the timezone configured by the user so you know what times to display. In general dates are logged in UTC and converted to the local time based on the user's configuration. The babyCount object is also calculated based on the timezone as it's date sensitive. |
string: unknown pacific central eastern mountain atlantic hawaiian alaska unitedkingdom germany arizona india newfoundland bangkok sidney gulf hongkong |
data.babystats | babystats is a calculated field. It contains the rollup of all stats by day. You can use noCountsByDay to control if this is sent in the response. noCountsByDay = true means this array will be empty. You can also use numberOfDays to control the number of days returned. These 2 fields are to help your app be more responsive. Instead of sending all data in the request you can just have it send a little bit. | array of babyCount |
data.transactions | transactions is the list of all AddWet, AddFeeding and AddStool transactions. You'll notice that weights, notes, kicks, and pumpings are all separated out into different fields. The reason for wets, feeding, and stools to be grouped is they are considered the base data that someone would track. Also, it was what I originally started with, so I chose to keep it consistent for backwards compatibility with any old android apps. | array of babyTransaction |
data.weights | weights are the array of weight transactions. | array of babyTransaction |
data.notes | notes are the array of note transactions. | array of babyTransaction |
data.sleep | sleep are the array of sleep transactions. | array of babyTransaction |
data.pumping | pumping are the array of pumping transactions. | array of babyTransaction |
data.kick | kick are the array of kick transactions. | array of babyTransaction |
data.kick | kick are the array of kick transactions. | array of babyTransaction |
data.startSleep | startSleep will be populated with a babyTransaction that indicates the user has started sleep. | babyTransaction |
data.startFeeding | startFeeding will be populated with a babyTransaction that indicates the user has started feeding. | babyTransaction |
data.uom | Please ignore this field it is no longer used on the BabyData object. The only place uom is used is on the babyTransction object. | ignore |
data.uomType | uomType is the type of UOM the user wants the data spoken or displayed to him. Values could be us or metric. | uomType |
{
"uom": "oz",
"breastSide": 0,
"uid": "0a0661d1-c747-4817-a380-bf274fb8f69f",
"requestType": 2,
"note": null,
"weight": 0,
"wet": 0,
"stool": 0,
"feeding": 1,
"bOz": 0,
"sleep": 0,
"feedingMinutes": 0,
"transactionDateTime": "2018-06-19T23:22Z"
}
Parameter | Description | Type |
---|---|---|
uom | The UOM the count was logged with. The default is oz. This is to allow a user to log feedings and pumpings in either oz OR ml. All counts are actually stored as oz and based on the uom field it will convert. The conversion factor from oz to ml is 29.5735. | oz ml |
breastSide | This is used when the user logs the breast side. The value will actually be stored as the integer value of the enumeration. This isn't as readable so I apologize, but I kept it to be backwards compatible. | integer: unknown = 0 left = 1 right = 2 both = 3 |
uid | uid is the unique ID for this count. It can be used in the RemoveTransaction and the UpdateTransaction calls. | string |
requestType | requestType is the type of the count. The value will actually be stored as the integer value of the enumeration. This isn't as readable so I apologize, but I kept it to be backwards compatible. | integer: AddWet = 1 AddFeeding = 2 AddStool = 3 AddWeight = 20 AddNote = 23 AddSleep = 29 AddPumping = 43 AddKick = 46, |
note | The note logged for the note count. | string |
weight | The weight logged for the weight count. The data will be stored in ounces. | decimal |
wet | wet is a legacy field. It's unneeded for you. But, what it represents is it will be 1 when the requestType is AddWet. You can ignore. | integer |
feeding | feeding is a legacy field. It's unneeded for you. But, what it represents is it will be 1 when the requestType is AddFeeding. You can ignore. | integer |
bOz | bOz is the bottle ounces. Data is stored in ounces and you can use the UOM to convert based on the uomType the user has configured. AddPumping or AddFeeding counts could have bOz populated if the user has tracked it. | decimal |
sleep | sleep is the number of minutes tracked for sleep. Data is stored in minutes. | integer |
feedingMinutes | feedingMinutes is the number of minutes tracked for a feeding. Data is stored in minutes. | integer |
transactionDateTime | transactionDateTime is the time the count was tracked. Counts are only tracked down to the minute (no seconds). The Z at the end is only to indicate the time is in UTC time. | date: yyyy-MM-ddThh:mmZ |
{
"spokenName": "coleman",
"displayName": "Coleman",
"id": "731954344",
"isDefault": false
}
Parameter | Description | Type |
---|---|---|
spokenName | The name expected to be spoken. "add feeding for {coleman}". The reason there is a spoken and a display field is to give the users the ability to tinker with it if Alexa doesn't understand it completely. So, they can help guide the assistant by changing it. All counts tracked with a babyName are fuzzy matched to find the baby. | string |
displayName | The name expected to be displayed. | string |
id | The id of the baby. | string |
isDefault | Indicates which baby is the default baby. This is used when the user tracks a stat without specifying a baby name. | boolean |
{
"uom": "oz",
"bOz": 0,
"wet": 1,
"stool": 1,
"feeding": 4,
"feedingMinutes": 0,
"date": "2018-01-12",
"sleepCount": 0,
"sleep": 0,
"pumping": 0,
"pOz": 0,
"kicks": 0
}
Parameter | Description | Type |
---|---|---|
uom | uom should be ignored on the babyCount. | ignore |
bOz | The aggregate bottle ounces for the day. Bottle ounces in the babyCount are just the feeding bottle ounces. | decimal |
wet | The aggregate wet counts for the day. | integer |
feeding | The aggregate feeding counts for the day. | integer |
feedingMinutes | The aggregate feeding minutes counts for the day. Data is stored in minutes. | integer |
date | The date of the count. Data is stored as yyyy-MM-dd, and it does take into account the local timezone. | date yyyy-MM-dd |
sleepCount | The aggregate sleepCount counts for the day. | integer |
sleep | The aggregate sleep minutes for the day. Data is stored in minutes. | integer |
pumping | The aggregate pumping counts for the day. | integer |
pOz | The aggregate pumping ounces for the day. Data is stored in ounces. | integer |
kicks | The aggregate kick counts for the day. | integer |
![]() |
![]() |
![]() |