Static ReadonlyAuthorizesTrue when the action authorizes its caller itself, so a public entry point such as the
RunAction mutation may run it for an authenticated user without an MJ: Action Authorizations link. Set it only on an action that either checks an authorization the caller
must hold, or reads and writes only with the caller's own permissions. Leave it false for an
action that acts with more authority than its caller, or that reaches data or sends messages
the caller chooses but could not otherwise reach.
The engine reads the marker only from the class that runs, never from its parent classes. A subclass that overrides a marked action must declare the marker again.
Whether this action can bound what it returns to an audience (RunActionParams.Audience): everyone
besides the caller who will see its output, such as the other participants of a shared conversation.
false by default, and the engine enforces it: when a run's audience adds a reader beyond the caller,
ActionEngineServer.RunAction refuses the action with result code AUDIENCE_UNSUPPORTED, without running
it. Override to return true only when the action honours the audience in full — every record, snippet
and count it returns is something every reader may see (pass the audience to the search engine, check each
reader's entitlement to anything it scopes by, and leave out aggregates computed before that filtering).
ProtectedCreateResolve the key (company credential first, then APOLLO_API_KEY) and build the client.
A protected seam so tests can substitute a client that never reaches api.apollo.io.
ProtectedgetExtract parameter value by name (case-insensitive) Handles special case where 'null' string should be treated as null value
ProtectedInternalInternal method that must be implemented by derived action classes. This is where the actual action logic should be implemented.
The action execution parameters including typed context
Promise resolving to the action result
ProtectedProcessMatches one group through people/bulk_match and writes every row of it. A row nothing
identifies is stamped and skipped before the call. A rate-limit or auth error stops the run
(it is rethrown); any other Apollo error fails this group only.
Executes the action with the provided parameters.
The action execution parameters including context
Promise resolving to the action result
ProtectedUpsertWrites employment rows when EmploymentHistoryFieldMappings is configured and education rows
when EducationHistoryFieldMappings is, independently of each other. The history entities'
contact FK column references the contact's key, so that key must be a single column.
Apollo.io Contact Enrichment Action
Enriches contact records with data from Apollo.io, including verified email addresses, employment history, education details and social profiles. Records are read in pages (keyset paging on a single-column key, see processAllContactRecords) and sent to
people/bulk_matchten at a time through ApolloPeopleClient.Every record sent to Apollo is stamped with
EnrichedAtField, matched or not, so a filter on that stamp never re-selects (and never pays for) the same miss twice.Params: EntityName, EmailField, FirstNameField, LastNameField, TitleField, EnrichedAtField, Filter (required); ProfilePictureURLField, AccountNameField, DomainField, LinkedInField, TwitterField, FacebookField, CompanyID, EmploymentHistoryFieldMappings, EducationHistoryFieldMappings (optional). The mapping params take the keys of EmploymentHistoryMapping and EducationHistoryMapping, as an object or a JSON string.
Result codes: SUCCESS, VALIDATION_ERROR, CONFIGURATION_ERROR, RATE_LIMIT_EXCEEDED, FAILED.