Skip to main content
ConfigView reads your Salesforce org through the Salesforce REST and Tooling APIs, signing in as a dedicated integration user through an External Client App that you create in Salesforce. You will end up with 3 secrets in ConfigView (SALESFORCE_INSTANCE_URL, SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET) when setup is complete.
Scope of this integration today. ConfigView reads who has Salesforce and with what profile, role and licence, who effectively holds admin powers (Modify All Data, View All Data, Manage Users, Customize Application, Author Apex), the outside apps people have authorized with their Salesforce account, connected apps and installed packages, where Salesforce is set up to send data, login history and the Setup Audit Trail. ConfigView only reads. It never creates or changes anything, and it never reads your CRM records: no accounts, contacts, leads, opportunities or cases.
Editions: Enterprise, Unlimited, Performance and Developer Edition. Professional Edition works only with the API add-on. Essentials has no API access.

Step 1: Open the Salesforce page in ConfigView

Open ConfigView in a second browser tab and leave it open: https://{companyname}.configview.com/admin/integrations/salesforce

Step 2: Create the integration user

ConfigView’s calls all run as one Salesforce user. Use a dedicated one, so the access is easy to see and nobody leaving the company breaks it.
  1. In Salesforce, open Setup → Users → Users → New User
  2. User License: Salesforce Integration (orgs get a few free). Profile: Minimum Access - API Only Integrations. If your org has no Salesforce Integration licences, any licence works with a profile that has API Enabled
  3. Use an address you control for the email, such as configview-integration@yourcompany.com, and save
Then give it read access to settings with a permission set:
  1. Setup → Permission Sets → New. Name it ConfigView Read Only. Leave License set to --None-- (or Salesforce Integration)
  2. Open System Permissions → Edit and turn on:
  1. Save, click Manage Assignments → Add Assignment, and assign it to the integration user
Customize Application is a write permission for Setup in the Salesforce UI. ConfigView never writes, and the integration user can’t sign in to the UI with the API Only profile. If your policy doesn’t allow it, leave it off and accept a partial Authorized Apps list.

Step 3: Create the External Client App

  1. Setup → External Client App Manager → New External Client App
  2. Name it ConfigView, enter a contact email, and set Distribution State to Local
  3. Under API (Enable OAuth Settings), check Enable OAuth. Enter any callback URL (https://login.salesforce.com/services/oauth2/success works; this flow doesn’t use it)
  4. OAuth Scopes: add only Manage user data via APIs (api)
  5. Check Enable Client Credentials Flow. Leave the other flow options as they are, and create the app
  6. Open the app’s Policies tab, click Edit, and under OAuth Policies → Client Credentials Flow set Run As to the integration user from Step 2. Save
  7. Open the Settings tab, expand OAuth Settings, and click Consumer Key and Secret. Salesforce emails you a verification code first
If your org still uses classic connected apps, a connected app with Enable Client Credentials Flow and a Run As user under Manage → Edit Policies works the same way.

Step 4: Paste the secrets into ConfigView

Paste each one under Credentials and click the save icon.

Step 5: Connect and verify

  1. Click Connect. ConfigView creates its tables and schedules every collector at your default run time. Stop any you don’t want under Collectors:
  1. Click Verify now. The health check gets a token, reports how much of your org’s daily API allocation is left, reads one user, then checks each optional permission.
If a check fails:
  • Token request fails with invalid_client or invalid_client_id. The consumer key or secret is wrong, or the app was created minutes ago. New External Client Apps can take up to 10 minutes to start working.
  • Token request fails with no client credentials user enabled. The app has no Run As user. Set it in Step 3.6.
  • SOQL on User fails with INSUFFICIENT_ACCESS or API_DISABLED_FOR_USER. The permission set from Step 2 isn’t assigned to the Run As user, or it lacks API Enabled.
  • “OauthToken visibility” is a warning. The integration user lacks Customize Application, so ConfigView sees only its own authorized apps.
  • “LoginHistory visibility” is a warning. The integration user lacks Monitor Login History.
  • “Daily API allocation” fails. Your org has used more than 80% of its 24-hour API allocation. ConfigView pauses its collectors above that level so your other integrations keep working. It resets on a rolling 24 hours.

Data Tables

Once the scripts run, these tables are created in your database. Each includes a run_at column and a raw_json column holding the record as Salesforce returned it, minus anything listed under What isn’t collected. Ids are Salesforce’s 18-character record Ids, so join users on user_id. Snapshot tables keep only the newest run. History tables (login history, Setup Audit Trail, event log files) keep every record ever collected. Salesforce deletes these after six months, so ConfigView’s copy is the only one that lasts longer.

Things worth knowing

Profiles are permission sets too. Every profile has a hidden permission set behind it (is_owned_by_profile = 1), and every user has an assignment to their profile’s one. So to find who holds a permission, join assignments to permission sets: that covers profiles, permission sets and permission set groups in one query. API calls come out of your org’s daily allocation. Salesforce gives each org a rolling 24-hour API request allocation (Enterprise: 100,000 plus 1,000 per licence), shared by every integration you run. A full ConfigView run on a 1,000-user org is a few dozen calls, plus one call per 2,000 new logins. Each collector stops cleanly once the org passes 80% of its allocation, and the next run picks up where it stopped. Authorized apps need Customize Application. Without it, Salesforce returns only the integration user’s own OAuth tokens. The collector notices and says so in its log, and the health check shows a warning. Salesforce stops a single OAuth token query at 2,500 rows. On large orgs ConfigView counts the tokens first and reads them in date windows small enough to come back whole. Login history and the audit trail only go back six months. That’s how long Salesforce keeps them. The first run backfills all six months. After that ConfigView keeps every record, so the history grows past six months from the day you connect. Outbound endpoints are hosts only. A named credential or remote site is stored as api.example.com, never the full URL, which can carry keys. Event log files without Event Monitoring. Orgs without the Event Monitoring add-on still get Login, Logout and API Total Usage files, kept for one day. ConfigView records that each file exists, never its contents.

What isn’t collected

  • CRM records: accounts, contacts, leads, opportunities, cases, or any custom object’s records
  • OAuth access tokens, refresh tokens and revoke handles. Only the app name, owner and usage counts are read
  • Event log file contents
  • Full URLs of named credentials, remote sites and connected app start pages. Hosts only
  • Passwords, security tokens and any credential stored in a named or external credential