
This document aims to help users at partner Credit Unions to better understand our data exports, their available columns and how to use them to generate metrics.
Guidelines
What is a Data Export?
Data export is a daily batch of data, sent in .csv format via SFTP or File Transfer API. It contains one table in a fixed predetermined format.
- Frequency: daily
- Channel: SFTP and File Transfer API
- Format: .csv
Data included: fixed predetermined format that scales across 100+ credit unions.
What is included in this Data Export?
Two different files:
- Loan applications for the past 1 day:
- A list of all loan applications (submitted and dropped) in the previous 1 day
- File name (for SFTP only):
lending-1-day_YYYYMMDDThhmmssZ_part-00000.csv
- Loan applications for the past 30 days:
- A list of all loan applications (submitted and dropped) in the previous 30 days
- File name (for SFTP only):
lending-30-days_YYYYMMDDThhmmssZ_part-00000.csv
Both will have the same fields (columns), but they will differ in use-cases (when to use each) and total volume of data, since one of them will include data for the past 30 days.
How to use the exports?
- Data warehouse ingestion: append the 1 day file into your warehouse, taking care to check if the record already exists there. In case an application started yesterday but finished today, it will be repeated and we have the column
record_last_updated_atto ensure you capture the latest data on that record. - Analysis: if you are going to analyze the data in a spreadsheet, use the 30 day file so you don't need to append anything.
How NOT to use the exports?
- Avoid duplicates:
- If you require a funnel metric (e.g. conversion) of over 30 days, you shouldn't append multiple 30 day files, because if you do you will get duplicates of the same applications.
The best way to proceed in this case would be to iterate through multiple files, getting the most recent status of each application.
Terminology:
- An application refers to any user who started the application process, even if they have dropped-off before submitting it to the LOS.
- If one user made multiple applications in the same session, the export will have multiple rows for that same session, one for each application.
- If a user applied multiple times for the same loan, we'll show multiple applications (one in each row).
Ingesting Exports into your Data Warehouse (DW):
- Update: if an application already exists in your DW as a row in a table, update the entire row; if it doesn't, create a new one.
- Append: always add new rows to the existing table.
Data Dictionary
| Field name | Description | Example |
|---|---|---|
| session_id | String: an id that represents an unique user session. A session is a period of up to 4 hours in which users are in our application. It will end if the user spends 15 minutes inactive. | 123456789 |
| application_id | String: an id that represents an unique application sent to the LOS. | 0030dbe4-ead5-4543-afa1-61d24688b4ef |
| user_id | String: a uuid that represents an unique user (main applicant) | 0030dbe4-ead5-4543-afa1-61d24688b4ef |
| applicant_name | String: the main applicant's full name | Jane Doe |
| applicant_email | String: the main applicant's e-mail | jane.doe@withclutch.com |
| user_phone | Number: the main applicant's phone number | 1234567891 |
| user_fico_score_range | String: the range in which the main applicant's f is located | 450-500 |
| user_income_range | String: the range in which the main applicant's self-declared annual income is located | 100,000-150,000 |
| applicant_address | String: the main applicant's address | 123 Main St |
| applicant_city | String: the main applicant's city | San Francisco |
| applicant_state | String: the main applicant's state | CA |
| applicant_zip_code | String: the main applicant's zip code | 12345 |
| applicant_employer | String: the main applicant's employer name | WithClutch Inc. |
| applicant_job_title | String: the main applicant's job title | Customer Success Manager |
| application_category | String: the loan type the user applied to (NULL if application was dropped before selection) | VEHICLE ; PERSONAL ; CREDIT CARD |
| credit_structure | String: a flag that determines if the application is for a loan or line of credit | LOAN ; LINE OF CREDIT |
| application_mode | String: a flag that determines if the application is new or to refinance an existing deal | NEW ; REFINANCE |
| collateral_type | String: a flag that determines what kind of collateral is being used (NULL if none) | NULL ; AUTO ; MOTORCYCLE ; CHECKING ACCOUNT |
| application_nr | Number: loan number in the LOS | 1234 |
| application_amnt | Number: amount the user applied for | $10,000.00 |
| experience_started_at | Timestamp: date and time when the application started | 2024-03-07 18:08:32.765 |
| user_authenticated_at | Timestamp: date and time when the user authenticated in our portal (NULL if they didn't) | 2024-03-07 18:08:32.765 |
| application_started_at | Timestamp: date and time when user selected an application category (NULL if they didn't) | 2024-03-07 18:08:32.765 |
| application_submitted_at | Timestamp: date and time when user submitted the application (NULL if they didn't) | 2024-03-07 18:08:32.765 |
| application_confirmed_at | Timestamp: date and time when LOS received the application (NULL if it didn't) | 2024-03-07 18:08:32.765 |
| record_last_updated_at | Timestamp: date and time when we last updated this record. | 2024-03-07 18:08:32.765 |
| utm_source | String: part of the URL used for tracking (must be in the Clutch URL). | |
| utm_medium | String: part of the URL used for tracking (must be in the Clutch URL). | ads |
| utm_campaign | String: part of the URL used for tracking (must be in the Clutch URL). | auto_refi_june_2024 |
| utm_content | String: part of the URL used for tracking (must be in the Clutch URL). | group_a |
| utm_term | String: part of the URL used for tracking (must be in the Clutch URL). | loans |
| accepted_tcpa_at | Timestamp: date and time when applicant accepted TCPA disclaimers. | 2024-03-07 18:08:32.765 |
| zest_score | Number: the main applicant's zest score for that application | 80 |
| chance_of_approval_badge | String:the badge shown to the applicant while browsing for that particular offer. Possible values:
| MEDIUM |
| gap_offered | Boolean: true or false in case the user was presented the opportunity to manifest interest in GAP (protection product). | TRUE |
| gap_selected | Boolean: true or false in case the user manifested interest in GAP (protection product). | TRUE |
| mp_offered | Boolean: true or false in case the user was presented the opportunity to manifest interest in mechanical breakdown protection. | TRUE |
| mp_selected | Boolean: true or false in case the user manifested interest in mechanical breakdown protection. | TRUE |
| pp_offered | Boolean: true or false in case the user was presented the opportunity to manifest interest in payment protection. | TRUE |
| pp_selected | Boolean: true or false in case the user manifested interest in payment protection. | TRUE |
| member_nr | Number: the main applicant's member number | 1234 |
| citizenship | String: applicant's citizenship | US citizen |
| referral_source | String: referral source defined in the application's URL. Matches with what goes into the LOS | lead-provider-name |
| origin_module | String: origin of the application. May have two values:
| LENDING |
| fraud_check_application_id | String: an identifier of the token (can be Null) | JA-DwyIHO5cTHu9uqquWDy9 |
| fraud_check_entity_token | String: an identifier of the token (can be Null) | J-KASoidfjs09SNGFKJ123 |
| gclid | String: Google click identifier, used in the URL for tracking purposes (can be Null) | 123xyz |
| disclosure_acknowledged_at | Timestamp: date and time when applicant accepted product specific disclaimers (credit cards and home equity). | 2024-03-07 18:08:32.765 |
| automobile_estimated_list_price | Number: in case it's a vehicle loan, the estimated list price for it. | 37545.72 |
| events_funnel_id | String: a uuid that represents an unique record in the export. This is the primary key for the table. | 0030dbe4-ead5-4543-afa1-61d24688b4ef |
| application_origin | String: it brings the application's origin. Possible values: • original • loan_cross_sell • deposit_cross_sell • remarketing | original |
How to calculate metrics from the export
a) Total numbers / amount of applications
Sum the application_amnt, because this file only shows apps that have already been submitted.
To count the total number of leads (not necessarily submitted), then you have to define what a lead is first, such as:
- A user who started the application experience
- Any application session that has been started
- Any application form that has been started
| A: session_id | B: user_id | C: experience_started_at | D: application_started_at | E: application_confirmed_at | F: application_category |
|---|---|---|---|---|---|
| 0030dbe4-ead5-4543-afa1-61d24688b4ef | 550e8400-e29b-41d4-a716-446655440000 | 3/7/2024 18:16:00 | 3/7/2024 18:17:00 | 3/7/2024 18:20:00 | CREDIT CARD |
| 00b49222-93db-4664-ba1d-1161ae9960af | 550e8400-e29b-41d4-a716-446655440000 | 1/23/2024 21:01:58 | 1/23/2024 21:02:58 | VEHICLE | |
| 0130be4e-79b5-42d8-b45c-398987e6f3de | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 1/12/2024 15:26:12 | 1/12/2024 15:27:12 | 1/12/2024 15:28:12 | PERSONAL |
| 0130be4e-79b5-42d8-b45c-398987e6f3de | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 1/12/2024 15:26:12 | 1/12/2024 15:30:25 | CREDIT CARD | |
| 99a8b36f-2734-49a2-92f6-cd04ffcc7d76 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 1/13/2024 20:13:15 | 1/13/2024 20:14:15 | 1/13/2024 20:16:27 | CREDIT CARD |
| 469381d8-3f60-48ed-a94d-37423e8d3221 | cfbbac43-51f1-477d-a9b2-931dd11fa584 | 1/10/2024 10:11:57 |
As you can see, we have three users:
- One of them with two applications to different loan types (each application in a different session)
- Another with three applications, but one of them repeated (same loan type, but in a different session)
- A third one who dropped off before choosing a loan type
This means that, depending on the definition of lead, you may have a different count of leads:
- You have 3 users, therefore 3 leads
- You have 3 users, two with 2 sessions, one with 1 session, therefore 5 leads
- You have 3 users, one that didn't start the form and the others started it 5 times, therefore 5 leads
The way you should calculate it is:
| A: Leads based on # users | B: Leads based on # sessions | C: Leads based on # forms started |
|---|---|---|
| =COUNTUNIQUE(column: user_id) | =COUNTUNIQUE(column: session_id) | =COUNTIFS(column: application_started_at, "<>") |
| i.e. is not null |
b) Conversion
This is a metric to measure the % of applications that ended up submitted to the LOS among all applications that were initiated.
To better calculate conversion rates, we propose counting applications where application_confirmed_at is not null.
After that, divide by the total number of leads (based on your definition of a lead). You can break it down by any other fields to have your conversion metric associated with something else, such as by loan type or by income range. Example:
We want to measure conversion by loan type, using the same example as above, looking at two lead definitions: by user and by session. The first thing is to get a list of all possible loan types, then count the number of leads and the number of apps submitted:
| A: Loan type | B: Leads based on # users | C: Leads based on # sessions | D: Applications submitted to the LOS |
|---|---|---|---|
| =COUNTUNIQUEIFS(column: user_id, column: application_category, A1) | =COUNTUNIQUEIFS(column: session_id, column: application_category, A1) | =COUNTIFS(column: application_confirmed_at, "<>", column: application_category, A1) | |
| CREDIT CARD | 2 | 3 | 2 |
| PERSONAL | 1 | 1 | 1 |
| VEHICLE | 1 | 1 | 0 |
After that, just divide the two numbers:
| A: Loan type | B: Leads based on # users | C: Leads based on # sessions | D: Applications submitted to the LOS | E: Conversion based on users | F: Conversion based on sessions |
|---|---|---|---|---|---|
| 1 | 1 | 0 | =D1 / B1 | = D1 / C1 | |
| CREDIT CARD | 2 | 3 | 2 | 100% | 67% |
| PERSONAL | 1 | 1 | 1 | 100% | 100% |
| VEHICLE | 1 | 1 | 0 | 0% | 0% |
c) Avg. time-to-apply
This is the time it takes, on average, for the user to apply for a loan.
To calculate it, add a new column to your table, let's call it time_to_apply, which will contain the time to apply for the loan in minutes. The values in this column should be the difference between fields experience_started_at and application_submitted_at.
The results will be in multiples of days, so to convert to hours, multiply by 24, and multiply by 60 to get minutes. See the example below:
| A: application_nr | B: experience_started_at | C: application_submitted_at | D: time_to_apply |
|---|---|---|---|
| 12345 | 3/7/2024 18:08:33 | 3/7/2024 18:16:00 | =(C1 - B1)2460 |
| 12346 | 1/23/2024 20:57:05 | 1/23/2024 21:01:58 | 4.88 |
| 12347 | 1/12/2024 15:23:05 | 1/12/2024 15:26:12 | 3.12 |
| 12348 | 2/12/2024 22:36:45 | 2/12/2024 22:36:46 | 0.01 |
Now, take the average out of column D, and you have your average time to apply. You can also split the average times by account type (or any other field) using the formula AVERAGEIFS.
Please notice: we're not using application_confirmed_at because it doesn't represent anything the user has done, only the confirmation from the LOS that the application was received.
d) Cross-sell
This metric measures the ability of selling an additional loan to an user who has submitted an application in the same period.
We have three definitions of cross-sell:
- Simple: the most generous metric, we look at total loan applications over total applicants, so an applicant who applied for two equal loans (e.g. two auto loans) would count.
- Distinct purpose: in this case, we don't count applications with the same application_category, collateral_type, funds_access_structure and application_mode. e.g. Two vehicle loans, both for motorcycles and both are new loans do not count as cross-sell.
- Basic: more pessimistic, we only count applications with entirely different application_category.
Look at the following example:
| A: application_nr | B: application_confirmed_at | C: user_id | D: application_category | E: collateral_type | F: funds_access_structure | G: application_mode | |
|---|---|---|---|---|---|---|---|
| 12352 | 3/7/2024 18:08:33 | b3acb1bd-6398-4b52-abf4-92f934200a2a | CREDIT CARD | LINE OF CREDIT | NEW | ||
| 12345 | 3/7/2024 11:08:33 | 550e8400-e29b-41d4-a716-446655440000 | VEHICLE | AUTO | LOAN | REFINANCE | |
| 12346 | 3/7/2024 12:08:33 | 550e8400-e29b-41d4-a716-446655440000 | VEHICLE | AUTO | LOAN | NEW | |
| 12347 | 3/7/2024 13:08:33 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | PERSONAL | LOAN | NEW | ||
| 12348 | 3/7/2024 14:08:33 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | VEHICLE | AUTO | LOAN | NEW | |
| 12349 | 3/7/2024 15:08:33 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | VEHICLE | AUTO | LOAN | REFINANCE | |
| 12350 | 3/7/2024 16:08:33 | bbb14fe5-0f7a-45be-9664-97e79631f645 | PERSONAL | LOAN | NEW | ||
| 12351 | 3/7/2024 17:08:33 | 9a20bb47-067b-4cb5-81ff-cf6c2c738518 | CREDIT CARD | LINE OF CREDIT | NEW |
The first thing to do here is to decide what is the period for cross-sell. Let's say it's 1 day, so we got all applications submitted on March 7th, 2024.
We have to define, per application, the keys to define if there is or there isn't cross-sell, and we do that by concatenating the values to be considered:
| A: application_nr | C: user_id | H: key_1 | I: key_2 |
|---|---|---|---|
| 12352 | b3acb1bd-6398-4b52-abf4-92f934200a2a | =CONCATENATE(C1,D1,E1,F1,G1) | =CONCATENATE(C1,D1) |
| 12345 | 550e8400-e29b-41d4-a716-446655440000 | 550e8400-e29b-41d4-a716-446655440000VEHICLEAUTOLOANREFINANCE | 550e8400-e29b-41d4-a716-446655440000VEHICLE |
| 12346 | 550e8400-e29b-41d4-a716-446655440000 | 550e8400-e29b-41d4-a716-446655440000VEHICLEAUTOLOANNEW | 550e8400-e29b-41d4-a716-446655440000VEHICLE |
| 12347 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2PERSONALLOANNEW | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2PERSONAL |
| 12348 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2VEHICLEAUTOLOANNEW | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2VEHICLE |
| 12349 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2VEHICLEAUTOLOANREFINANCE | 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2VEHICLE |
| 12350 | bbb14fe5-0f7a-45be-9664-97e79631f645 | bbb14fe5-0f7a-45be-9664-97e79631f645PERSONALLOANNEW | bbb14fe5-0f7a-45be-9664-97e79631f645PERSONAL |
| 12351 | 9a20bb47-067b-4cb5-81ff-cf6c2c738518 | 9a20bb47-067b-4cb5-81ff-cf6c2c738518CREDIT CARDLINE OF CREDITNEW | 9a20bb47-067b-4cb5-81ff-cf6c2c738518CREDIT CARD |
Now we're going to count, per user, how many cross sales they had based on each definition:
| A: user_id | B: simple cross sell | C: distinct purpose cross sell | D: basic cross sell |
|---|---|---|---|
| b3acb1bd-6398-4b52-abf4-92f934200a2a | =COUNTUNIQUE(column: user_id) | =COUNTUNIQUE(column: key_1) | =COUNTUNIQUE(column: key_2) |
| 550e8400-e29b-41d4-a716-446655440000 | 2 | 2 | 1 |
| 40ebb32e-6b7e-48f0-ab4b-8d6f090f74b2 | 3 | 3 | 2 |
| bbb14fe5-0f7a-45be-9664-97e79631f645 | 1 | 1 | 1 |
| 9a20bb47-067b-4cb5-81ff-cf6c2c738518 | 1 | 1 | 1 |
Now, we count how many applicants with over 1 cross sold applications we got, and divide by total number of applicants:
| A: Applicants | B: Applicants with simple cross-sell | C: Applicants with distinct purpose cross-sell | D: Applicants with basic cross-sell |
|---|---|---|---|
| =COUNTUNIQUE(column: user_id) | =COUNTIFS(column: simple cross sell, >1) | =COUNTIFS(column: distinct purpose cross sell, >1) | =COUNTIFS(column: basic cross sell, >1) |
| 5 | 2 | 2 | 1 |
Now we just get the rates, dividing B, C and D by A:
- Simple: 2 applicants out of 5 = 40%
- Distinct purpose: 2 applicants out of 5 = 40%
- Basic: 1 applicant out of 5 = 20%
FAQ
- How can I get started with data exports? A: Just ask your Customer Success manager to turn it on for you! We will need to set up a proper SFTP connection, so we might have to engage your IT team. We also require the server to be hosted by you. As an alternative to SFTP, you can download these reports through our File Transfer API.
- Why should I use Clutch's data exports? A: It's a way for your team to be informed about what's going on without having to ask for ad-hoc reports. It works for both operations and IT, because it allows you to manipulate the .csv file in Microsoft Excel or Google Sheets, and also empowers your IT team to ingest the data into your data warehouse. It's an extract of data you can build reports on top of.
- What's the cost? A: Clutch does not charge any additional fees. We just require you to have an SFTP server hosted by you for now. Alternatively, you can use our File Transfer API.
- How long are the exports available for download? A: When using SFTP, it is up to you. Since the server is hosted by you, once we push the .csv files you can decide what's the best approach on how to deal with them. For the File Transfer API, new exports are generated daily at 11:00AM UTC and will remain available until 23:59 UTC each day.
- What should I do if I didn't receive my daily file? A: Contact your Customer Success manager to inform them of the problem. We'll ensure you receive your data ASAP.
- I lost access to a file and I need to recover a copy. How can I get it? A: Talk to your Customer Success manager to arrange a recovery.
- I need a data export for sandbox data, how do I get it? A: Sandbox only has test users and can be misleading when interpreting data. We do not support sandbox data export.
- How can I request a new data export to answer new business questions? A: Help us understand what exactly you are trying to achieve. Your implementation engineer can guide you if there is a way to use existing exports. If not they will bubble up this feedback to the product team.
- What to do if I want to ask for additional fields in my data export? A: We currently only support limited fields as we build a scalable data infrastructure for 2024. However, do send us your feedback for future considerations.
- What to do if I want to report inconsistencies in the data? A: Inform your Customer Success manager, and we will assign an engineer to work on it immediately.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article