Bug: Amplitude not receiving complete set of properties

We have amplitude connected but are missing things in the events stream.

First, the FeatheryStepLoad event is not fired. In this screenshot you can see that it’s in amplitude but only because I manually added it. It’s also why there are no properties. Notice it says “Planned” under the event name vs “Live”.

Compare this to the FeatheryStepSubmit which does have properties:

Second, for FeatheryStepSubmit, it’s good that the formId and stepId are there, but there should be values for the answer data too. Otherwise we cannot filter by those that answered a given question a certain way (and did not complete the survey). See previous screenshot and you can see there are no answer properties.

Lastly, the FeatheryFormComplete also does not have any properties except formId. So we can identify the form but not any of the answers.

Suggestions:

  • The formId should be an iD and not the name since that is changeable. Should have both formId and formName where the formId is truly the ID in feathery. Much easier to ensure we don’t have any brittleness.
  • Ditto about stepId but not sure if ID makes sense here vs always calling this stepName? (e.g stepId":"How did you hear about us?" smells wrong)
  • For the form data itself, perhaps every completion event (whether step or form completion) you use amplitude’s nested properties feature and add a nested property for every step data. So on a FeatheryStepComplete it would be 1 additional property. For FeatheryFormComplete it would be 1 property for each step in the form. This allows it to scale well but you also then have enough context in the properties to understand the form submission and each step.
stepData1: {
    'id': '123',
    'onboarding_first_name': 'Joe',
    'onboarding_last_name': 'Burrow',
}
stepData2: {
    'id': '456',
    'onboarding_how_did_you_hear_about_us': 'Search engine'
}
stepData3: {
    'id': '789',
    'where_selling_currently': ['Etsy', 'Other']
}

Note:

  1. Amplitude only supports single level of nesting
  2. Within the nested props, it does support arrays (so solves issue of multi valued step questions like in stepData3 above
  3. Amplitude has a nice feature that you opt into as a property level for “property splitting” which then tells them to split JSON nested and arrays. Nothing for you to do on this, but just info you may want to include in your docs for customers: https://help.amplitude.com/hc/en-us/articles/9623000954907-Cart-analysis-Use-object-arrays-to-drive-behavioral-insights#h_01GGX3KMYSJX6EBW6WHRC7PEMH

Update: I thought of another way to do the event props above which is based on this: https://help.amplitude.com/hc/en-us/articles/9623000954907-Cart-analysis-Use-object-arrays-to-drive-behavioral-insights#h_01H9REGFGH7EQPT5EKKCE865AE

formData: [
    {
        <step data>
    {
]

however the downside of this is taht this approach is meant for more ecommerce situations where the property values between objects in the array are identical. In Feathery’s case each step can have varying # of questions on a page and different types of answers so think this isn’t ideal approach becuase you’d lose the linking between question and answer on a given step. e.g. think of a step where you ask for first and last name, the way that object would be modeled would be odd.

formData: [
 {
    'id': '123',
    fieldId: ['onboarding_first_name', 'onboarding_last_name']
    fieldValue: ['Joe', 'Burrow']
 },
 {
    'id': '456',
    fieldId: ['onboarding_how_did_you_hear_about_us'],
    fieldValue: ['Search engine']
 },
 {
    'id': '789',
    fieldId: ['where_selling_currently'],
    fieldValue: ['Etsy', 'Other']
  }
]

for the 2nd and 3rd question this works because it’s a single question essentially. But for the first one, it’s a bit odd since you can’t specficially get the field value for the first question since they are independent data structures within that object now. Again, this approach is meant for shopping carts, where the field values aren’t meant to cross referenced like survey data.

While “name” questions are a little unusual for this because it’s so open ended and analysis in amplitude (or any product analytics tool won’t be looking at name values). But even if I construct a scenario where we are asking someone “Where did you first see our ad?” and “Where did you last see our ad?”:

formData: [
 {
    'id': '456',
    fieldId: ['where_seen_ads_first', 'where_seen_ads_last'],
    fieldValue: ['Search engine', 'Twitter']
 },
 {
    'id': '789',
    fieldId: ['another_question],
    fieldValue: ['Foo']
  }
]

in the above, you have no idea which answer corresponds to each question.

Not sure if this is related to what we are seeing with our webhooks not having data either:

Not sure if something has changed, but we are now seeing FeatheryStepLoad come in with no changes on our side.

Amplitude is now reporting the event as Live (vs Planned) and props are coming in now.

Other problems exist still with FeatheryFormComplete and FeatherStepSubmit missing answer data

Duh, I thought about this again and realize at the form completion we do not need to know each step. What we need is the entire form data. So my recommendation for the event props on the FeatheryFormCompletion event is exactly how you represent it in your rudderstack data in properties. fieldData except bringing it out a level:

"formId": "My form name"
"fieldData": {
    "onboarding_describe_yourself": [
        "just_exploring"
    ],
    "onboarding_first_name": "Trevin",
    "onboarding_how_did_you_hear_about_us": [
        "search_engine"
    ],
    "onboarding_last_name": "Chow",
    "plan_to_sell": [
        "leprechauns"
    ],
    "where_selling_currently": []
}

fyi it looks like our amplitude event form data being passed had an unnecessary extra layer called amplitude. This layer has been removed in the latest library version (2.0.288)

We are looking at some events on a new form and it’s been awhile since I looked at this in amplitude. In the FeatheryStepComplete and FeatheryFormComplete I don’t see any event properties that show the actual answers.

I’m thinking this is something wrong in our form implementation but wanted to check

This is screenshot from amplitude debug view:

and in the FeatheryStepSubmit event there’s also no info:

Is our form just setup wrong or is there something missing in the event props for amplitude events?

thank you for flagging – this has actually been fixed on our end and available on 2.0.322 now

1 Like

we updated to 2.0.325 and are still not seeing the right event props.

@peter any idea if you’ll be able to fix this?

This is as of this morning with 2.0.35

amplitude field data only gets populated on the step submit event

Still not seeing the answer data in FeatheryStepSubmit so we are either doing something wrong or the data isn’t there:

Additionally, Is there any chance of getting all the answer data rolled into the FeatheryFormComplete as well? It’s the most logical place to add all the answer data rather than having to look only at the step submission (which I agree is useful still to have)

I just tested it myself with the amplitude integration and can verify the FeatheryStepSubmit event is sending form data. Perhaps you’re not on the latest library version yet.

Hmm… we are def using the latest version 2.0.329. I just verified our package.json and did a deployment.

I wonder if it’s the setup for of the form. We are making a custom rating control as we wanted it numeric vs hearts/stars that you have in the rating built in control.

We have 10 buttons which set the Help Article Rating hidden field to the value of that number. Is it something wrong with the creation of the form?

Form ID is 070c482a-f93d-4b97-906e-7841ee46adba

That would explain it – the submitted fields only include the submitted form fields. However, 2.0.330 should send all of the field data (including hidden fields) on the form completion event

Ok thanks. That helps. Because we already had the switch tuned on that said to send hidden fields on submit but nothing was happening.

The new 2.0.330 fixes this finally. Thanks.