Data Exports: Account Opening

Modified on Mon, Mar 2 at 5:35 PM

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 or 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:

  • Account opening applications for the past 1 day:
    • A list of all account opening applications (submitted and dropped) in the previous 1 day
    • File name (for SFTP): account-opening-1-day_YYYYMMDDThhmmssZ_part-00000.csv
  • Account opening applications for the past 30 days:
    • A list of all account opening applications (submitted and dropped) in the previous 30 days
    • File name (for SFTP): account-opening-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_at to 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 opening the account.
  • An account is the actual account to be created via an application.
  • If one application was made for multiple accounts, the export will have multiple rows for the same application, one for each account.
  • If a user applied multiple times for the same account, we'll show multiple applications (one in each row).


Ingesting Exports into your Data Warehouse (DW):

  1. 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.
  2. Append: always add new rows to the existing table.


Data Dictionary

Field nameDescriptionExample
application_idString: a uuid that represents an unique account opening application.0030dbe4-ead5-4543-afa1-61d24688b4ef
applicant_idString: a uuid that represents an applicant (not unique, we added user_id as unique id per applicant).0030dbe4-ead5-4543-afa1-61d24688b4ef
account_nrNumber: the account number in core, if an account was created. Null if no account was created.300101234
applicant_nameString: applicant's first and last name. Null if the user dropped-off before identifying themselves.John Smith
applicant_emailString: applicant's e-mail. Null if the user dropped-off before identifying themselves.john.smith@withclutch.com
member_nrNumber: the user's member number in core. Null if the user wasn't an existing member and didn't finish the application.400012345
applicant_phoneString: applicant's phone number. Null if the user dropped-off before identifying themselves.2121234567
applicant_addressString: applicant's address. Null if the user dropped-off before identifying themselves.123 Main st.
applicant_zipCodeString: applicant's zip code. Null if the user dropped-off before identifying themselves.12345
applicant_cityString: applicant's city. Null if the user dropped-off before identifying themselves.Rio de Janeiro
applicant_stateString: applicant's state. Null if the user dropped-off before identifying themselves.CA
applicant_employerString: applicant's employer. Null if the user dropped-off before identifying themselves.Amazing Credit Union
applicant_job_titleString: applicant's job title. Null if the user dropped-off before identifying themselves.Member Service Representative
eligibility_criteriaString: applicant's eligibility criteria for membership. Null if the user dropped-off before identifying themselves.family
eligibility_detailString: applicant's eligibility criteria details entered. Null if the user dropped-off before identifying themselves.Spouse - Name of family member
product_nameString: the account name that the user is applying for. Null if the user dropped-off before selecting one.Amazing Account Plus
product_typeString: account type that the user is applying for. Null if the user dropped-off before selecting one.savings ; certificate ; checking
is_new_memberBoolean: true if applicant was an existing member when the application started, false if not.true ; false
funding_typeString: the funding method the applicant has chosen:
• CREDIT_CARD: credit card (Stripe);
• INTERNAL_ACCOUNT: transfer from existing account at the CU;
• ACH: transfer from existing account in another institution (Plaid);
• CASH: cash;
• LFAO: funding performed by the CU via transfer from the GL;
• NULL: user dropped-off before choosing a funding method.
CASH
funding_amntNumber: amount the user decided to use to fund the account.$1000.00
application_originString: a flag that determines where the application originated from: branch portal or consumer portal.branch ; consumer
branch_nameString: the name of the branch where the application is sitting at.The Best Branch
branch_user_idNumber: identifier of the employee responsible for the application.1234
employee_nameString: name and last name of the employee responsible for the application.
application_statusString: current status of the application. Possible values:
• ACCEPTED: the application was successful and an account has been opened;
• INITIATED: the application started but is still undergoing the regular process;
• FRAUD_VERIFICATION: our fraud management tool is currently working to make sure this isn't a fraudulent application;
• DENIED: the application wasn't allowed to proceed;
• CANCELLED: the application started but didn't continue the flow;
• ERROR: the application had an issue;
• EXTERNAL_FUNDING_CONFIRMATION: we're waiting for funding confirmation;
• LOAN_FIRST_DRAFT: a non-member submitted a loan application but no employee has triggered the account opening yet.
ACCEPTED
account_statusString: current status of the account. Possible values:
• CREATED: the account has been opened;
• CANCELLED: the application was cancelled before an account has been created;
• PENDING: the application regarding that account is still undergoing the opening process.
PENDING
funding_statusString: current status of the funding. Possible values:
• COMPLETED: the account has been funded;
• CANCELLED_OR_REFUNDED: the application was cancelled before an account has been created;
• CREATED / INITIATED / PENDING: we're still waiting for funding to finish;
• ERROR: funding issue.
COMPLETED
application_created_atTimestamp: date and time when the application started.2024-03-07 18:08:32.765
account_created_atTimestamp: date and time when the account was created. [DEPRECATED - use account_booked_to_core_at]2024-03-07 18:08:32.765
application_updated_atTimestamp: date and time when we last updated this record.2024-03-07 18:08:32.765
received_AANBoolean: TRUE if the applicant received an Adverse Action Notice, FALSE if nottrue ; false
aan_created_atTimestamp: date and time when the Adverse Action Notice was sent2024-03-07 18:08:32.765
aan_reasonString: reasons for why the applicant received an Adverse Action NoticeAsset ownership history
utm_sourceString: part of the URL used for tracking (must be in the Clutch URL).facebook
utm_mediumString: part of the URL used for tracking (must be in the Clutch URL).ads
utm_campaignString: part of the URL used for tracking (must be in the Clutch URL).auto_refi_june_2024
utm_contentString: part of the URL used for tracking (must be in the Clutch URL).group_a
utm_termString: part of the URL used for tracking (must be in the Clutch URL).loans
funding_started_atTimestamp: date and time when the user chose a funding method (NULL if they didn't)2024-03-07 18:08:32.765
funding_authorized_atTimestamp: date and time when the user had its funding authorized (NULL if they didn't)2024-03-07 18:08:32.765
fraud_check_approved_atTimestamp: date and time when the user was approved by our integrated fraud check flow (NULL if they didn't)2024-03-07 18:08:32.765
account_booked_to_core_atTimestamp: date and time when the user's account was booked to core (NULL if they didn't)2024-03-07 18:08:32.765
user_idString: a uuid that represents an unique applicant.0030dbe4-ead5-4543-afa1-61d24688b4ef
session_idString: 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
extra_feeNumber: real number representing the extra fee, can be Null5.0
accepted_tcpa_atTimestamp: date and time when the accepted TCPA (NULL if they didn't)2024-03-07 18:08:32.765
fraud_check_entity_tokenString: an identifier of the token (can be Null)J-KASoidfjs09SNGFKJ123
account_idString: a uuid that represents an unique account.0030dbe4-ead5-4543-afa1-61d24688b4ef
citizenshipString: applicant's citizenship.US/American
handoff_typeString: property that determines how the handoff for in-branch applications happened. May have two values: DIGITAL or NON_DIGITAL.digital
consent_typeString: property that determines how the consent for account opening was given. May have two values: DIGITAL_CONSENT (if the applicant clicked in the experience) or MANUAL_CONSENT (if the applicant gave the consent to the MSR).DIGITAL_CONSENT
account_featuresArray: list of features the applicant added to the account.[”OVDT” , ”DBT”]
fraud_check_statusString: most up to date fraud check status. Possible values:
  • APPROVED
  • DENIED
  • PENDING_USER_ACTION
  • REFER
  • ERROR 

APPROVED
fraud_check_application_id
String: an identifier of the token (can be Null)
JA-DwyIHO5cTHu9uqquWDy9



How to calculate metrics from the export

a) Conversion

This is a metric to measure the % of applications that ended up with an account created among all applications that were initiated.


To better calculate conversion rates, count applications with application_status = ACCEPTED.

After that, divide by the total number of applications. You can break it down by any other fields to have your conversion metric associated with something else, such as by employee, by funding type or by product. Example:


We want to measure conversion by employee. The first thing is to get a list of all employee names and then count the total number of applications handled by each of them. To do that, apply the formula (in a sheet): =COUNTIFS(column: employee_name, field: the employee you want)

This should be the result:

A: EmployeeB: Count of apps
Nicholas Hinrichsen=COUNTIFS(column: employee_name, A1)
Arthur Araujo23
Tamanna Kotwani32
Mauricio Castro107


After that, just add another column with the count of applications accepted and divide the two numbers:

A: EmployeeB: Count of appsC: Count of accepted appsD: Conversion
Nicholas Hinrichsen250=COUNTIFS(column: employee_name, A1, column: application_status, "ACCEPTED")=C1 / D1
Arthur Araujo23522%
Tamanna Kotwani322888%
Mauricio Castro1078579%


b) Avg. time-to-open account

This is the time it takes, on average, to open an account.


To calculate it, add a new column to your table, let's call it time_to_open, which will contain the time to open that account in minutes. The values in this column should be the difference between fields application_created_at and account_created_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_idB: application_created_atC: account_created_atD: time_to_open
0030dbe4-ead5-4543-afa1-61d24688b4ef3/7/2024 18:08:333/7/2024 18:16:00=(C1 - B1)2460
00b49222-93db-4664-ba1d-1161ae9960af1/23/2024 20:57:051/23/2024 21:01:584.88
0130be4e-79b5-42d8-b45c-398987e6f3de1/12/2024 15:23:051/12/2024 15:26:123.12
013d362c-2cec-498c-a444-5fc6f14dc7662/12/2024 22:36:452/12/2024 22:36:460.01


Now, take the average out of column D, and you have your average time to fund. You can split the average times by account type (or any other field) using the formula AVERAGEIFS.


c) Funding amount by funding type

This is a way of knowing how much is being deposited into new accounts for funding. You can split by any field. In this example we'll usefunding type.


Grab all values for funding type and insert into a table. Then, just take the averages based on them, using =AVERAGEIFS(column: funding_amount, column: funding_type, field: the funding type you want):

A: Funding typeB: Funding amount
CREDIT_CARD=AVERAGEIFS(column: funding_amount, column: funding_type, A1)
INTERNAL_ACCOUNT$8,761.42
CASH$5,295.92
ACH$2,144.23
LFAO$0.01


d) Volume over time

The objective here is to create a chart with the volume (in quantity of accounts or in funding amount) of new accounts.

Decide on desired granularity (daily, weekly, monthly, etc.) and assign each row to one value. For example, let's say you want a weekly report. This means you need to assign each account to a week, and for that you can use the WEEKNUM function, that returns the week number of the year (from 1 to 53).

A: application_idB: account_numberC: account_created_atD: week_of_2024
0030dbe4-ead5-4543-afa1-61d24688b4ef3055769043/7/2024 18:16:00=WEEKNUM(C1)
00b49222-93db-4664-ba1d-1161ae9960af3053710071/23/2024 21:01:584
0130be4e-79b5-42d8-b45c-398987e6f3de3053422981/12/2024 15:26:122
013d362c-2cec-498c-a444-5fc6f14dc7663054033712/12/2024 22:36:467


Now, you can simply count the number of accounts or even sum the amount of funding for each week of the year in a new table. For that, you can use the COUNTIFS or SUMIFS functions:

A: Week of 2024B: Number of accountsC: Total funding
1=COUNTIFS(column: week_of_2024, A1)=SUMIFS(column: funding_amount, column: week_of_2024, A1)
275$58,000
384$72,300
423$22,087
578$60,684


You can also calculate the average funding amount per week by dividing C by B. On top of this table, just create the chart you want: bar chart, column chart, line chart.


FAQ

  1. 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.
  2. 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.
  3. What's the cost? A: Clutch does not charge any additional fees. We just require that you host your own SFTP server if you want to use SFTP to receive these reports. Alternatively, you can use our File Transfer API.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article