02.1. Minimum system version
EBF Contacts supports the following operating systems:
- iPhone and iPad: iOS / iPadOS 18 or later
- Android devices: Android 13 or later
- Starting with EBF Contacts version 3.2.0, the app requires iOS 26.
Recommended Setup
- Keep devices updated to the latest supported OS version.
- Use a supported UEM (Unified Endpoint Management) solution such as:
- Microsoft Intune
- Ivanti / MobileIron
- Jamf
- Blackberry
- Workspace One
02.2. Caller Identification
EBF Contacts can identify incoming callers on:
- iPhones
- Android phones
- Android tablets
Important Requirements
To make caller identification work correctly:
- Store all phone numbers in international format.
- Include the country code.
Example Germany: +49 221 474550
Best Practices
- Avoid local-only numbers such as 0221 474550.
- Use one consistent number format across all data sources.
- Verify imported contacts before large deployments.
02.3. AppConfig
It is mandatory for EBF Contacts to receive an AppConfig or a Managed-AppConfig from an UEM System (e.g. MobileIron/Ivanti, Microsoft Intune, Jamf). The AppConfig can/must contain the following key/value pairs, where all values are of type „string“:
Required parameters
Showing 6 parameters
Defines the customer or company name displayed in the app configuration.
- Type
- String
- Example
EBF GmbH- Notes
- Mandatory for all deployments.
Defines the customer license key.
- Type
- String
- Example
97MtLkThSDF…- Notes
- Contains an expiration date. The app displays an error after expiration. Contact the EBF Sales team for valid keys.
Defines how many devices may use the app.
- Type
- Enum
- Example
150- Notes
- Match this value to the licensed device count.
Defines the Exchange On-Premise server URL or Microsoft 365 Azure Application ID.
- Type
- URL String
- Example
https://my-exchange-server.com610fc6a9-2659-842e-8733-5ceb3aeda4ac- Notes
- Exchange requires a full HTTPS URL including protocol. Microsoft 365 requires an Azure Application ID.
Defines the HubSpot private application token.
- Type
- String
- Example
pat-eu1-xxxxxxxx- Notes
- Create a private HubSpot app with the permission
crm.objects.contacts.read.
Defines the downloadable ZIP archive containing CSV or JSON files.
- Type
- URL
- Example
https://my-server.com/ContactsExport.zip- Notes
- ZIP files must use HTTPS and contain valid CSV or JSON files.
No parameters match your search.
Microsoft 365 Authentication Methods
Showing 2 authentication methods
User Login AuthenticationDelegatedUsers sign in with Azure AD username and password.
- Best Use Case
- Use when users need personal contacts synchronization.
- Permissions
- Delegated:
Contacts.Read,User.Read,User.ReadBasic.All,User.Read.All - Limitations
- Users must authenticate manually.
Anonymous AuthenticationApplicationThe app authenticates with an Azure Application ID and secret. Users do not sign in manually.
- Best Use Case
- Use for easier onboarding, kiosk devices, or users without Azure AD accounts.
- Permissions
- Application:
Contacts.Read,User.Read.All - Limitations
- Cannot combine with
readPersonalContacts. Secrets require regular renewal.
Azure App Registration Requirements
Showing 4 requirements
Tenant TypeDepends on deployment type and tenant parameter usage.
- Required Value
- Multitenant or Single Tenant
iOS Redirect URLConfigure as Public / Native Client redirect URI.
- Required Value
msauth.de.ebf.contacts://auth
Android Redirect URLConfigure as Public / Native Client redirect URI.
Special characters like "+", "/" or "=" may show encoded (e.g. "%2B") in the Azure UI. This is by design.
- Required Value
msauth://de.ebf.contacts/bX7u+szRPaxp7M/Ux+hz8esKB7I=
ADFS RequirementRequired for successful Azure authentication on devices using ADFS.
- Required Value
- Forms-Based Authentication enabled
Common Optional Parameters
Showing 39 parameters
Reads specific Exchange address lists instead of the default GAL.
- Type
- JSON
- Default
- N/A
- Notes
- Requires
useFindPeople=true.
Merges phone numbers from matching contacts across multiple data sources.
- Type
- Boolean
- Default
- false
- Notes
- Recommended only for environments with 5,000 contacts or fewer.
Allows users to copy phone numbers and email addresses.
- Type
- Boolean
- Default
- true
- Notes
- Disabling this also disables
exportContact.
Allows custom SSL certificates.
- Type
- Boolean
- Default
- false
- Notes
- Use only with trusted certificates.
Changes the displayed app title.
- Type
- String
- Default
- EBF Contacts
- Example
Acme Directory- Notes
- Useful for company branding.
Controls which contact fields appear during incoming calls.
- Type
- JSON
- Default
- Built-in default
- Example
{ "givenName": -1, "surname": -1, "jobTitle": 10, "department": 10, "companyName": 18, "custom1": "(", "officeLocation": 15, "custom2": ")" }- Notes
- Supports
givenName,surname,jobTitle,department,companyName, andofficeLocation.When changing this parameter in an existing installation all users must do a "Clear local data" or "logout" to start with a fresh caller directory.
Disables AppConnect handling when opening the native mail client from EBF Contacts.
- Type
- Boolean
- Default
- false
- Notes
- Recommended if users experience issues or error messages when opening the native mail client from EBF Contacts while AppConnect is enabled. Often used together with the
mailClientparameter for troubleshooting email integration problems.
Allows only part of the contact fields to be synchronized to the ContactProvider Extension.
- Type
- String
- Default
- N/A
- Example
JobTitle, MailJobTitle, CompanyName, Department, Mail- Notes
- By default the display name and all phone numbers are always synchronized. You can decide whether the other four fields —
JobTitle,CompanyName,Department, andMail— are also moved to the ContactProvider Extension.
Disables the requirement for users to create and enter an encryption password when starting EBF Contacts.
- Type
- Boolean
- Default
- false
- Notes
- Even when this parameter is enabled, EBF Contacts still encrypts contact data stored on the device. This setting only removes the user password prompt during app startup.
Disables the notification feature that will notify the user when the sync interval expired. The notification allows jumping to the app to trigger the sync process.
- Type
- Boolean
- Default
- false
- Notes
- User needs to start the app regularly to get updates when notification is deactivated.
Defines how long the app waits before sending another request to the Exchange On-Premise server after a failed request.
- Type
- String
- Default
- 15000
- Example
30000- Notes
- Helps reduce server load and repeated failed requests in unstable network environments. Increase this value if the Exchange server rate-limits or temporarily blocks requests after failures.
Enables Microsoft 365 delta synchronization.
- Type
- Boolean
- Default
- true
- Notes
- Downloads only changed contacts after the first sync.
Enables the iOS ContactProvider Extension instead of the default CallKit extension. When enabled, EBF Contacts synchronizes contact data with the native iOS Contacts framework. This allows users to search contacts in the native Contacts app and CarPlay, resolve contact names in iMessage and SMS, start calls using Siri, and access contacts in the iPad Contacts app.
- Type
- Boolean
- Default
- false
- Notes
- Supports approximately 25,000 contact entries. Administrators should disable the restriction "Allow documents from managed apps to unmanaged apps" to prevent contact data leakage to unmanaged apps.
Known issue in iOS 26.x: removing the EBF Contacts app does not automatically remove synchronized contacts from the iOS Contacts app. Users must disable the ContactProvider Extension in the app settings before uninstalling the app. Apple fixed this issue in iOS 26.4.
Lets the admin limit which data sources are pushed to the ContactProvider Extension.
- Type
- JSON
- Default
- All data sources will be synchronized
- Example
{ "O365": [ "GAL", "PersonalContacts", "OrganizationContacts" ], "HubSpot": [], "Zip": [], "ExchangeOnPremise": [] }- Notes
- For O365 you can remove single groups like
GAL,PersonalContactsorOrganizationContacts.
For ZIP you can put each CSV/JSON file in the list to have only single data files synchronized. Example:"Zip": ["file1.csv", "file2.json"]
HubSpot and Exchange On-Premise sources can only be enabled or disabled completely.
Defines the password policy for the local encryption password used in EBF Contacts. Administrators can enforce password length and complexity requirements for users.
- Type
- JSON
- Default
- No policy enforced
- Example
{ "MaxLength": 16, "MinLength": 8, "Complexity": 2 }- Notes
- Supports password complexity rules based on character classes: uppercase letters, lowercase letters, numbers, and special characters.
Complexity values:
0 = No complexity requirements
1 = At least 2 character classes (uppercase, lowercase, numbers, or special characters)
2 = At least 3 character classes (uppercase, lowercase, numbers, or special characters)
3 = All character classes required (uppercase, lowercase, numbers, and special characters)
Encrypts synchronized user profile images stored on the device.
- Type
- Boolean
- Default
- true
- Notes
- Recommended for environments with strict security or compliance requirements. When enabled, EBF Contacts encrypts all cached user images locally on the device.
Allows exporting contacts to the personal address book.
- Type
- Boolean
- Default
- false
- Notes
- Requires
allowCopy=trueandenableContactProvider=false.
Imports all contact entries from the ZIP archive, including entries with duplicate or missing email addresses. By default, EBF Contacts only imports ZIP entries with a unique email address.
- Type
- Boolean
- Default
- false
- Notes
- Even when enabled, Caller ID can only assign each phone number once. Use this parameter carefully — duplicate contacts may appear in the app.
Enables additional debug logging.
- Type
- Enum
- Default
- Disabled
- Example
debug- Notes
- Users can export logs from the Settings screen.
Defines which email application EBF Contacts uses when a user selects the "Send Email" action from a contact.
- Type
- Enum
- Default
- Native mail app
- Example
MSOutlookEmailPlusBlackBerryWorkBoxerWorkspaceONE- Notes
- If the parameter is empty or missing, EBF Contacts uses the native Mail app on iOS and Gmail on Android. In iOS environments using AppConnect, administrators may need to enable
closeAppConnect=trueif users experience issues opening the native mail client.
Changes Microsoft 365 sync package size.
- Type
- String
- Default
- 100
- Example
500- Notes
- Works only when
deltaEnabled=false.
Enables anonymous Microsoft 365 authentication.
- Type
- String
- Default
- N/A
- Notes
- Cannot be combined with
readPersonalContacts.
Defines a custom Microsoft Graph filter for synchronizing Microsoft 365 contacts. Administrators can use this parameter to override the default EBF Contacts filtering behavior.
- Type
- String
- Default
- N/A
- Example
proxyAddresses/any(x:startswith(x,'smtp:')) and UserType eq 'Member' and AccountEnabled eq true and ShowInAddressList ne false
- Notes
- Requires
deltaEnabled=false. If enabled, EBF Contacts downloads all contacts and applies the filter locally. Incorrect filters may exclude valid users from synchronization.
Defines how many parallel requests EBF Contacts sends to the Exchange On-Premise server during synchronization.
- Type
- String
- Default
- 20 (useFindPeople=false) / 10 (useFindPeople=true)
- Example
15- Notes
- Increasing this value may improve synchronization speed but can increase server load. Lower values may improve stability in restricted or slower environments.
Defines the Exchange password used for authentication.
- Type
- String
- Default
- N/A
- Notes
- Not recommended for standard user deployments. Intended mainly for technical or shared service accounts. Store securely in the UEM configuration.
Provides a compressed synchronization optimization string for large Exchange On-Premise environments. This parameter helps EBF Contacts retrieve all contacts more efficiently when Exchange query limits apply.
- Type
- String
- Default
- N/A
- Notes
- EBF Contacts generates this value automatically after the first full synchronization. Administrators can distribute the generated string to other users to improve initial synchronization performance.
Defines the primary color used for buttons and UI highlights in EBF Contacts.
- Type
- Hex
- Default
- #2494C5
- Example
#1271C5- Notes
- Use standard hexadecimal color values (example:
#FF0000for red). Useful for company branding and custom app styling.
Enables synchronization of Microsoft 365 organization contacts. Organization contacts usually contain externally managed company contacts maintained by administrators.
- Type
- Boolean
- Default
- false
- Notes
- Requires the Azure application permission
OrgContact.Read.All. Delta synchronization is automatically disabled for organization contacts because Microsoft Graph does not return phone numbers through the delta API in this case.
Enables synchronization of users' personal contacts stored in their Exchange or Microsoft 365 mailbox.
- Type
- Boolean
- Default
- false
- Notes
- Personal contacts are user-managed external contacts. This parameter cannot be used together with
office365Secretbecause anonymous authentication does not support personal contacts. In Exchange On-Premise environments, this feature may fail if "Extended Protection" blocks REST API communication.
Defines how long EBF Contacts waits for a server response before cancelling an API request.
- Type
- String
- Default
- 15
- Example
30- Notes
- Increase this value for slow network connections or overloaded Exchange servers. Lower values may improve responsiveness but can cause synchronization failures in unstable environments.
Defines the minimum number of characters a user must enter before the app starts searching contacts.
- Type
- String
- Default
- 3
- Example
2- Notes
- Increasing this value can improve search performance and reduce server or device load in environments with very large contact databases. For example, a value of 3 starts searching after the user enters three characters.
Filters synchronized contacts by Azure AD group.
- Type
- JSON
- Default
- All contacts
- Example
{ "values": ["HR Team", "DEV Team"] }- Notes
- Maximum 15 groups. Requires
Group.Read.Allpermission.
Controls which settings users can view, change, or use inside EBF Contacts. Administrators can enable or disable features and decide whether users may modify those settings themselves.
- Type
- JSON
- Default
- N/A
- Example
{ "showUserImageAllowed": true, "showUserImageActivated": true, "showUserImageOnlyInDetailAllowed": true, "showUserImageOnlyInDetailActivated": false, "biometricsAllowed": false, "biometricsActivated": true, "synchronizationAllowed": false, "synchronizationActivated": true, "mobileDataAllowed": false, "mobileDataActivated": true, "standardCallAllowed": true, "faceTimeCallAllowed": true, "teamsCallAllowed": true, "teamsVideoCallAllowed": true, "syncIntervalAllowed": false, "autoSyncIntervalIndex": 3 }- Notes
- All JSON keys must be included in the configuration. Missing values may cause unexpected behavior. Supports settings for user images, biometrics, synchronization, mobile data usage, calling options, and synchronization intervals.
Supported keys:showUserImageAllowed— Allows users to enable or disable user imagesshowUserImageActivated— Enables or disables user imagesshowUserImageOnlyInDetailAllowed— Allows users to show images only in detail viewshowUserImageOnlyInDetailActivated— Enables showing images only in detail viewbiometricsAllowed— Allows users to enable or disable Face ID / Touch IDbiometricsActivated— Enables or disables biometric loginsynchronizationAllowed— Allows users to enable or disable synchronizationsynchronizationActivated— Enables or disables synchronizationmobileDataAllowed— Allows users to enable or disable mobile data usagemobileDataActivated— Enables or disables mobile data synchronizationstandardCallAllowed— Allows standard phone callsfaceTimeCallAllowed— Allows FaceTime callsteamsCallAllowed— Allows Microsoft Teams audio callsteamsVideoCallAllowed— Allows Microsoft Teams video callssyncIntervalAllowed— Allows users to change synchronization intervalsautoSyncIntervalIndex— Defines the synchronization interval: 0 = every 8 hours, 1 = every 24 hours, 2 = every 48 hours, 3 = every 7 days
Displays business address information for personal contacts in the contact details view.
- Type
- Boolean
- Default
- false
- Notes
- When enabled, EBF Contacts shows available business address information for synchronized personal contacts.
Shows Microsoft 365 user presence information.
- Type
- Boolean
- Default
- false
- Notes
- Requires
Presence.Read.Allpermission.
Defines the Microsoft 365 tenant.
- Type
- String
- Default
- N/A
- Example
ebf.de31be2ebc-ba2d-49c4-a680-ffdw30h7b5ed- Notes
- Not required for multi-tenant deployments.
Enables an alternative Exchange On-Premise endpoint for retrieving contact data.
- Type
- Boolean
- Default
- false
- Notes
- Required when using the
addressListIdsparameter to filter specific address lists. When enabled, EBF Contacts uses the Exchange "FindPeople" API, which supports up to 1,000 results per request instead of the standard 100-result EWS limit. The defaultonPremRequestCountalso changes from 20 to 10.
Prefills the username field for Exchange login or identifies the user when authentication does not use personal credentials.
- Type
- String
- Default
- N/A
- Example
john.doe@company.com- Notes
- Can simplify user onboarding by pre-filling the login screen. This parameter is also required to enable the QR code feature when using authentication methods without user credentials, such as
office365Secret, HubSpot, or ZIP data sources. Use the user's email address so EBF Contacts can correctly identify the user.
Defines the ZIP archive password.
- Type
- String
- Default
- N/A
- Notes
- Supports ZipCrypto encryption only.
No parameters match your search.
An example AppConfig XML file and plist is available below:
<managedApplicationConfiguration>
<version>1.7.0</version>
<bundleId>de.ebf.contacts</bundleId>
<dict>
<string keyName="customerName">
<defaultValue>
<value>customer name</value>
</defaultValue>
</string>
<string keyName="licenseKey">
<defaultValue>
<value>license keys</value>
</defaultValue>
</string>
<string keyName="endpoint">
<defaultValue>
<value>Office 365 or url</value>
</defaultValue>
</string>
<string keyName="tenant">
<defaultValue>
<value>tenant only for Office 365</value>
</defaultValue>
</string>
<string keyName="licenseCount">
<defaultValue>
<value>license count</value>
</defaultValue>
</string>
<string keyName="office365PageSize">
<defaultValue>
<value>999</value>
</defaultValue>
</string>
<string keyName="selectedGroups">
<defaultValue>
<value>{ "values" : [ "Name of AD group 1", "Name of AD group 2"] }</value>
</defaultValue>
</string>
<string keyName="callerIdStructure">
<defaultValue>
<value>{"givenName": -1,"surname": -1,"custom": "-","jobTitle": 10,"department": 10,"companyName": 18,"officeLocation": 15}</value>
</defaultValue>
</string>
</dict>
</managedApplicationConfiguration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>customerName</key>
<string>EBF GmbH</string>
<key>licenseKey</key>
<string>97MtLkThSDFo39kmkj6pW/aTR20Rbj5nPiIa4IKYWB2YZ3orT8ms5rVkXLQHc9NcGLnv5ZiC172cJQsPx6Q4l/pLs=</string>
<key>endpoint</key>
<string>9f12e12e-ea6b-42db-8712-ea1040aa9999</string>
<key>tenant</key>
<string>ebf.de</string>
<key>licenseCount</key>
<string>200</string>
<key>office365PageSize</key>
<string>500</string>
<key>selectedGroups</key>
<string>{ "values" : [ "Name of AD group 1", "Name of AD group 2"] }</string>
<key>callerIdStructure</key>
<string>{"givenName": -1,"surname": -1,"custom": "-","jobTitle": 10,"department": 10,"companyName": 18,"officeLocation": 15}</string>
</dict>
</plist>
02.4. Prefix Combination Explanation (Only Exchange On-Premise)
Why This Configuration May Be Needed
Exchange Web Services (EWS) limits the number of contact records returned in a single query. Organizations with large contact databases may need to adjust the EBF Contacts configuration to ensure the app synchronizes all contacts correctly.
Without optimization:
- Initial synchronization may take a long time
- Some contacts may not appear immediately
- Users may experience slower first-time setup
EWS Query Limits
EWS supports the following maximum results per query:
- Standard mode:
- Up to 100 records per query
- When using the useFindPeople parameter:
- Up to 1000 records per query
EBF Contacts identifies records using the contact’s email address.
Default Synchronization Behavior
By default, EBF Contacts processes the contact database in multiple steps.
This approach:
- Helps avoid EWS query limits
- Allows the app to eventually synchronize all contacts
However, the first synchronization can take longer in environments with many contacts.
Improving Synchronization Speed
After the first full synchronization completes:
- Restart the app once
- Open the log file
- Locate the generated compressed string
You can share this string with other users through the configuration parameter:
prefixCombinations
Using this parameter helps:
- Reduce synchronization time
- Improve first-time app setup
- Speed up contact indexing for additional users
Example Configuration
prefixCombinations=fVvdmqO6rnyXdb2Tr8F20jzL/s4FSSD8Q2ySzMzTH6iysZiV3RctlQnIkl…
Important
- The app only accepts the compressed string format
- Do not modify the generated value manually
Best Practices
- Use useFindPeople when your Exchange environment supports it
- Perform the first synchronization with a stable internet connection
- Share the generated prefixCombinations value with other users in the same environment
- Restart the app after the initial synchronization completes
Troubleshooting
Synchronization Takes Too Long
- Verify the number of contacts in the Exchange environment
- Enable useFindPeople if available
- Confirm network connectivity and server response times
Some Contacts Are Missing
- Check that contacts contain valid email addresses
- Verify that Exchange returns the expected records
- Review existing contact filtering rules
prefixCombinations Does Not Work
- Confirm that the full compressed string was copied correctly
- Make sure the value was added exactly as generated
- Do not add spaces or line breaks
02.5. Default filtering behavior on synchronisation of contacts data
EBF Contacts automatically filters contact records during synchronization.
The app only displays contacts that match the required rules.
Office 365 (O365) Filtering Rules
A contact appears in EBF Contacts only if all of the following conditions are true:
- The contact uses the user type member
- The related user account is enabled
- The showInAddressList attribute is:
- empty (null), or
- set to true
- The contact includes at least one of these:
- email address
- mobile phone number
- business phone number
Important
The app does not synchronize private phone numbers
Custom Filtering
Administrators can override the default filter by using the configuration parameter:
office365UserFilter
Exchange On-Premise Filtering Rules
A contact appears in EBF Contacts only if:
- “Hide from Address Lists” is disabled
- The contact includes at least one of these:
- email address
- mobile phone number
- business phone number
Important
The app does not synchronize private phone numbers
Troubleshooting
If contacts are missing:
- Verify that the user account is enabled
- Check the showInAddressList setting
- Confirm that the contact contains a supported phone number or email address
- Review custom filter settings
- Run a manual synchronization
02.6. Filtering via selectedGroups (only O365)
EBF Contacts can filter contacts by Azure AD groups.
Use the selectedGroups configuration parameter to load contacts only from selected groups.
How It Works
- If selectedGroups is empty or missing:
- EBF Contacts loads all contacts
- If selectedGroups contains group names:
- EBF Contacts only loads contacts from those groups
Limits
- Maximum supported groups: 50
Example
{
"values": [
"HR Team",
"DEV Team"
]
}
Troubleshooting
If contacts do not appear:
- Confirm that the group name matches Azure AD exactly
- Verify that the user belongs to the selected group
- Check that the total number of groups does not exceed 50
02.7. AppTunnel/VPN
EBF Contacts uses port 443 for data synchronization.
Security Requirements
- Always use HTTPS connections
- The app does not support unencrypted HTTP connections
VPN Recommendations
If your Exchange server requires secure internal access:
- Use a VPN solution
- Use your UEM platform’s VPN feature when possible
Troubleshooting
If synchronization fails:
- Confirm that the server URL starts with https://
- Verify that port 443 is open
- Check that the VPN connection is active
- Test access to the Exchange server from the device browser
02.8. Authentication and permissions
EBF Contacts supports these authentication methods:
- Basic Authentication
- NTLM Authentication
Exchange On-Premise Requirements
Users must have permission to access Exchange Web Services (EWS)
Optional Technical User
You can configure a technical user account.
This account:
- Must have a mailbox
- Must have standard permissions
- Can remain hidden from address lists
Android Requirement
For Exchange On-Premise on Android disable “Extended Protection” on the Exchange server
Personal Contacts Access
If you enable:
readPersonalContacts
the app also needs access to Exchange REST API.
Troubleshooting
If login fails:
- Verify username and password
- Confirm that EWS access is enabled
- Check whether “Extended Protection” is disabled for Android environments
- Confirm that the REST API is available when using personal contacts
- Review server authentication settings
02.9. Encryption password policy
By default, EBF Contacts does not enforce password complexity rules.
Administrators can define password requirements through configuration settings.
Available Character Classes
You can require these character types:
- Uppercase letters
- Lowercase letters
- Numbers
- Special characters
Configuration Options
MaxLength
Maximum password length
MinLength
Minimum password length
Complexity
0 = No complexity requirements
1 = Password must contain at least 2 of the following: uppercase letters, lowercase letters, numbers, or special characters
2 = Password must contain at least 3 of the following: uppercase letters, lowercase letters, numbers, or special characters
3 = Password must contain uppercase letters, lowercase letters, numbers, and special characters
{
"MaxLength": 16,
"MinLength": 3,
"Complexity": 0
}
Best Practices
- Use a minimum length of at least 8 characters
- Require multiple character types for better security
- Avoid short passwords in production environments
02.10. HubSpot setup
EBF Contacts supports synchronization of contact data from HubSpot CRM application.
For this to work you need to create a private application in the HubSpot admin portal.
Go to “Settings” → “Account Setup” → “Integrations” → “Private Apps”

Create a new application and enter an application name. Then select the scope (permission): crm.objects.contacts.read

After creating the application an Access token will be shown, that needs to be provided in the EBF Contacts configuration in the “hubSpotToken” parameter.
Example:
hubSpotToken=pat-eu1-xxxxxxxx-xxxxxxxx-xxxxxxxx
Important Security Note
- Treat the token like a password
- Do not share the token publicly
- Rotate the token regularly based on your company security policy
Troubleshooting
If synchronization fails:
- Verify that the token is valid
- Confirm that the required permission is enabled
- Check that the token was copied correctly
- Test the HubSpot connection again after saving settings
02.11. CSV and JSON data source in ZIP archive
EBF Contacts can import contact data from CSV or JSON files.
Requirements
- Store the files inside a ZIP archive
- Upload the ZIP file to a reachable web server
- Provide the ZIP file URL in the configuration
Supported Security
ZIP password protection using ZipCrypto
Required Configuration
Set the ZIP file URL in:
zipURL
Required Fields
Each CSV or JSON file must include:
- Display Name
- Email Address
- Phone Number or Mobile Phone
Example Workflow
- Create CSV or JSON contact files
- Compress the files into a ZIP archive
- Upload the ZIP file to a secure web server
- Add the ZIP URL to the EBF Contacts configuration
- Add the ZIP password if required
- Start synchronization
Troubleshooting
If import fails:
- Verify that the ZIP URL is accessible
- Confirm that the ZIP file is not corrupted
- Check that required fields exist
- Verify the ZIP password
- Confirm that the server supports HTTPS access
Additional Support
EBF can help customers create:
- PowerShell scripts
- Export scripts
- Valid data export files
Please find valid JSON and CSV example files below.
JSON
[
{
"DISPLAY NAME": "Adele Vance",
"TITLE": "Retail Manager",
"EMAIL ADDRESS": "adele.vance@ebf.com",
"OFFICE": "18/2111",
"FIRST NAME": "Adele",
"LAST NAME": "Vance",
"DEPARTMENT": "Retail",
"COMPANY": "EBF GMBH",
"PHONE": "+1 425 555 2222",
"MOBILE PHONE": "+1 425 555 3333",
"IMAGE URL": "https://picsum.photos/200/300.jpg",
"MANAGER EMAIL": "",
"PHONE2": "+1 425 555 1111",
"PHONE3": "+1 425 555 6666"
},
{
"DISPLAY NAME": "Grady Archie",
"TITLE": "Designer",
"EMAIL ADDRESS": "grady.archie@ebf.com",
"OFFICE": "18/2111",
"FIRST NAME": "Grady",
"LAST NAME": "Archie",
"DEPARTMENT": "R&D",
"COMPANY": "EBF GMBH",
"PHONE": "+1 425 555 4444",
"MOBILE PHONE": "+1 425 555 5555",
"IMAGE URL": "https://picsum.photos/200/300.jpg",
"MANAGER EMAIL": "adele.vance@ebf.com",
"PHONE2": "+1 425 555 8888"
}
]
CSV
"DISPLAY NAME","EMAIL ADDRESS","COMPANY","DEPARTMENT","FIRST NAME","LAST NAME","OFFICE","PHONE","MOBILE PHONE","TITLE","MANAGER EMAIL","IMAGE URL","PHONE2","PHONE3" "Adele Vance","adele.vance@ebf.com","EBF GmbH","Retail","Adele","Vance","18/2111","+1 425 555 2222","+1 425 555 3333","Retail Manager","","https://picsum.photos/200/300.jpg","+1 425 555 1111","" "Grady Archie","grady.archie@ebf.com","EBF GmbH","R&D","Grady","Archie","18/2111","+1 425 555 4444","+1 425 555 5555","Designer","adele.vance@ebf.com","https://picsum.photos/200/300.jpg","+1 425 555 7777","+1 425 555 8888"
02.12. Android specifics
On Android devices, EBF Contacts stores synchronized contacts inside the Android system contacts database.
This allows caller identification for incoming calls.
Security Requirement
Install EBF Contacts only inside an:
- Android Enterprise Work Profile
This helps prevent unmanaged apps from accessing company contact data.
Browser Requirement
Install a browser app inside the Work Profile.
The app needs a browser to:
- Open the Microsoft 365 login page
- Complete authentication
Important Uninstallation Behavior
Android keeps synchronized contacts in the Work Profile after app removal.
To remove all contacts completely:
Option 1
Remove the entire Work Profile
Option 2
Before uninstalling:
- Open EBF Contacts
- Select Logout
- Wait for contact cleanup to finish
- Uninstall the app
Troubleshooting
If contacts remain after uninstall:
- Confirm that the user logged out before uninstalling
- Remove the Work Profile if cleanup did not occur
If login pages do not open:
- Verify that a browser exists inside the Work Profile