Skip to content
Book a Demo Open a Case

Salesforce apps by To A Finish

Four managed packages that run inside your own Salesforce org.

Simple Signature

Document creation and e-signatures in Salesforce

Address Verification

Clean, verify and geocode Salesforce addresses

Highlighter

Colors, renames or hides Salesforce fields

List Browse

Browse Salesforce records without list clicking

Get started

Install, configure and roll out a TAF package.

Implementation guides

Guides for all four apps are ready.

How-to articles

One article per task

Book a demo

See a package in a live org

Compatibility

Editions and releases we support

Get help

Open a case and a person reads it.

Open a support case

The fastest route to an answer

Give us access

Let us sign in and see the problem

Support home

Guides, release notes and the case form

Troubleshooting

Search by the error text you see

Documentation

Written for admins, not for developers.

Implementation guides

Guides for all four apps are ready.

How-to articles

One task per article

Change log

What changed in each release

Compatibility

Editions and seasonal releases

Simple Signature Address Verification Highlighter List Browse Support Book a Demo
Simple Signature · How-to

More request options

How to do it in Simple Signature, one step at a time.

Last updated 9 Oct 2026

Paid version only. These steps do not count in the setup progress.

These options serve special cases. Read them, and set up only what your process needs.

Request settings on the Configuration tab

OptionWhat it does
Run PDF Automation on SaveMakes the PDF when the form is signed.
Attach PDF After SignatureSaves the PDF on the Signature record.
Attach PDF on Parent Record After signatureSaves the PDF on the parent record of the Signature.
Attach PDF on Contact Record If Not ParentAlso saves the PDF on the Contact of the Signature, when the Contact is not the parent.
Email PDF to Contact After SignatureEmails the PDF to the signer.
Use Files instead of AttachmentsSaves the signature pictures and the PDFs in Files, not in Notes & Attachments. Salesforce then shows the files in both lists.
Turn Off EmailsStops all emails, except to the addresses and domains on the Whitelist. When it is off, all emails go, except to the Blacklist.
Blacklist and Whitelist Emails/DomainsThe addresses or domains for Turn Off Emails.
Default Signature Request Send Email (Uses Org-Wide Email)One address that sends the requests and the signed PDFs. See the next section.
CC Record Owner When Emailing Signed PDFCopies the user who made the request on the email with the signed PDF.
CC Record Owner's Role Hierarchy When Emailing Signed PDFAlso copies the manager of that user, the manager's manager, and so on.
CC Other Email Address When Emailing Signed PDFCopies one fixed address.
BCC Record Owner's Email to Salesforce When Emailing Signed PDFLogs the email in the activity history, when the user has Email to Salesforce on.
Send Email to Partner, Partner Email AddressOnly with TAF support, for orgs where TAF hosts the requests, for example Professional Edition.

The Attach and Email options are defaults. The fields Attach PDF?, Attach PDF to Parent? and Email PDF? on a Signature record change them for that record.

The sender of the emails

The request email comes from the user who sends the request. The email with the signed PDF comes from the user who authorized the site. To send both from a known address, use one of these ways.

  • Type one address in Default Signature Request Send Email on the Configuration tab. The address must be a verified Organization-Wide Email Address.
  • Or make a verified Organization-Wide Email Address for each user who sends requests. Both emails then come from that user. For a user with no such address, Simple Signature uses the default address, then the user who authorized the site.

To add an address, open Setup and type Organization-Wide Addresses in the Quick Find box. Salesforce sends a verification email to the new address.

If an email comes from an address that ends in sfcustomeremail.com, Salesforce could not send it from the user's own address. This happens when your email domain is not set up for email from Salesforce. A verified Organization-Wide Email Address, and the email authentication in the next section, fix it.

Emails that look like spam

Email programs can mark Salesforce email from your domain as unsafe, with a warning such as Be careful with this message. To stop this, your email admin must let Salesforce send email for your domain. This setup is called email authentication, for example SPF and DKIM. Ask your Salesforce partner, or open a case and TAF points you to help.

Request parameters for an experience

A signature experience can send requests too. Add these parameters to the experience. See Build a signature experience.

ParameterWhat it does
allowrequestAdds a button to the form that sends a signature request. Pick In-Person Signature, Signature Request Only, or Signature Request and In-Person Signature.
embedpdfShows the PDF above the form, so the signer can read it before the signature.
generateqrcodeMakes a QR code for the request and shows it in the window. The signer scans it with a phone to open the signing page.
multistepMakes a Step record with the request. See More than one signer.
emailtemplaterequestThe Name, not the label, of the email template for the request.
emailtemplatecompletionThe Name of the email template for the email with the signed PDF.
nosignatureLets the signer submit the form with no signature.
rurlThe page on the site that opens after the signature, for example a thank-you page.
requestedpdfnameThe file name of the signed PDF. It can hold fields, for example {!Contact.Name}_Release.

A form in a Lightning component does not work offline in the Salesforce mobile app. An action does.

More than one signer

A request can collect signatures from several people, one after the other or at the same time. Each signer gets a Step record, a child of the Signature.

  1. Turn on MultiStep for the request.

    On an action or in a Flow, set the field signature__MultipleSteps__c to True. In an experience, tick the parameter multistep.

  2. Check the first Step.

    Simple Signature makes the first Step record, with Order 1, when it makes the Signature. Requests with steps use the email template ESignMutliContact, not the regular request template. The name has this typo on screen.

  3. Build a Flow that makes the other Steps.

    Start the Flow when a Step record with Order 1 is made. Make one Step record for each other signer, with these fields.

    FieldValue
    First NameThe first name of the signer. The email can show it.
    Last NameThe last name of the signer.
    EmailThe address that gets the request.
    Order2, 3, 4 and so on. The order of the requests.
    Email TemplateThe unique name of an email template, if you do not use ESignMutliContact. Then also set emailtemplatecompletion in the experience.
    StatusRequested
    Wait On Prior StepTrue sends the request only after the step before it is Signed. False sends it at the same time.

    Save the Flow. Activate it.

  4. Copy the signatures to the Signature record, if the PDF shows them.

    When all Steps are Signed, the Status of the Signature changes to Signed, and Simple Signature makes the PDF. Step 1 copies its date and its signature to the Signature. For the other steps, make your own fields on ß Signature, for example a Rich Text field SignatureImage2__c, a field SignatureDate2__c and a field SignatureName2__c.

    Then build a Flow on Step. Start it when the Status of a Step with Order 2 changes to Signed. Copy these values. Do the same for Order 3 and higher.

    Signature fieldValue from the Step
    SignatureImage2__csignature__SignatureImage__c
    SignatureDate2__csignature__Signed__c
    SignatureName2__csignature__Firstname__c, a space and signature__LastName__c

    A developer can also read the signatures from the Steps in Apex code for a Visualforce PDF.

Check who signed

People question electronic signatures more often than paper ones. These fields help you check that the right person signed. They cannot prove it.

FieldWhat it does
Signature MFAA code that the signer must type before the form shows. Fill it in with a Flow or a trigger. Give the code to the signer another way, for example by phone.
Expiration DateA date in the future. After it, the request is no longer valid.
Digital FingerprintA 32-character value for the device of the signer, saved at the signature. Two signatures with the same value came from the same device. The component fingerPrintInformation shows the details on a Signature page.
Actual Signed IP, Actual Signed IP InfoThe IP address of the signer, and its location when Simple Signature can find it.
Actual Signed LocationThe latitude and longitude of the signer, when the device gives them.

These formulas make the values easier to read. Make each one as a Text formula field on ß Signature.

A link to the details of the IP address

if ( not ( isblank ( signature__IPWhenSigned__c ) ), signature__IPWhenSigned__c & " " &
HYPERLINK("https://ipapi.co/"+signature__IPWhenSigned__c+"/json/", "info","_blank"), "" )

A link to a map of the location

if ( not ( isblank ( signature__ActualSignedLocation__Latitude__s ) ),
text( signature__ActualSignedLocation__Latitude__s )+" "+text(
signature__ActualSignedLocation__Longitude__s ) + " " +
HYPERLINK("http://www.google.com/maps/place/"+text(
signature__ActualSignedLocation__Latitude__s )+","+text(
signature__ActualSignedLocation__Longitude__s ), "map","_blank"), "" )

The time from the request email to the signature

if( if( isblank ( signature__ActualSignedTimestamp__c ), Now(),
signature__ActualSignedTimestamp__c ) - if ( isblank ( signature__Emailed__c ),
CreatedDate, signature__Emailed__c ) > 0 , "D:"
& TEXT( FLOOR( if ( isblank ( signature__ActualSignedTimestamp__c ), Now(),
signature__ActualSignedTimestamp__c ) - if ( isblank ( signature__Emailed__c ),
CreatedDate, signature__Emailed__c ) ) ) & " H:"
& RIGHT( "0" & TEXT( FLOOR( MOD( ( if ( isblank ( signature__ActualSignedTimestamp__c ),
Now(), signature__ActualSignedTimestamp__c ) - if ( isblank ( signature__Emailed__c ),
CreatedDate, signature__Emailed__c ) ) * 24, 24 ) ) ),2) & " M:"
& RIGHT( "0" & TEXT( ROUND( MOD( ( if ( isblank ( signature__ActualSignedTimestamp__c ),
Now(), signature__ActualSignedTimestamp__c ) - if ( isblank ( signature__Emailed__c ),
CreatedDate, signature__Emailed__c ) ) * 24 * 60, 60 ), 0 ) ),2), "")

The last formula shows days, hours and minutes, for example D:0 H:02 M:15. A blank or strange value needs a check. You can change it to count only days or hours, and then set a limit on the time to sign.

Hide the record ID in the link

The request link holds the ID of the Signature record. A signer who changes the ID could open another request, if the site shares too much. To hide the ID, Simple Signature can put a random 32-character path in the link.

  1. Copy the body of your request email.

    On the Email Templates tab, click View beside the request template you use, EmailSignature at first. Select the whole body, with the button. Copy it. Close the window.

  2. Click New. Fill in the template. Paste the body. Click Save.

    Fill in Label, Name and Subject. Description is optional. Tick Active. Keep the Name for step 5. Expand HTML Body. Paste the body. Click Save.

  3. Change the link in the code of the new template.

    Click Edit beside the new template. Expand HTML Body. Click the code button </>. Find the two links of the button, data-cke-saved-href and href. Replace the value inside the quote marks of both with this text. Remove any fixed web address in front of it.

    {!signature__Signature__c.signature__SiteURL__c}/{!signature__Signature__c.signature__Signature_Path__c}

    Click Save.

  4. Check that the site uses signatureURLRewriter.

    You set it in step 2 of Set up the signature site.

  5. Make the request use the new template.

    Open the Request Signature action. Under Predefined Field Values, click New. Pick Email Template (Request). Type the Name of the new template in quote marks, for example "Secure_Request". Click Save.

    For an experience, use the parameter emailtemplaterequest.

  6. Send a test request.

    The link in the email now ends with a random path, not with ?id= and the record ID.

Countersignature

A user can save a signature once. Simple Signature then adds it to the PDF after the signer signs, as a countersignature.

  1. Make a Files library named Simple Signature.

    In the App Launcher, type Files. Click Files. Click Libraries. If no library named Simple Signature exists, click New Library. Type Simple Signature. Click Save.

  2. Add the users who countersign to the library.

    Open the library. Click Manage Members. Add the users. For many users, add a public group.

  3. Each user saves a signature on the User Signature page.

    In the App Launcher, the user types User Signature, opens it and signs.

  4. Add the countersignature to the PDF template.

    In a Google Docs template, use the merge code <ß>User.LibrarySignature-300</ß>. See Merge codes for Google Docs.

Experience Cloud users need the permission Access Libraries for User Signature. It is off at first.

Your own signing page

The standard page SiteSignature serves most orgs. To change more than a few fields, a developer can start from a copy of it.

  • Open Setup. In the Quick Find box, type Visualforce Pages. Click New. Type a Label and a Name. Delete the code in the page.
  • Copy the code of Custom_SiteSignature from the pages folder of the sample code on GitHub, from <apex:page to </apex:page>. Paste it. Click Save.
  • In the list of Visualforce pages, click Security beside the new page. Give access to the profiles that use Simple Signature. Click Save.
  • Edit your signature site. In Active Site Home Page, pick the new page. Click Save.

TAF can write the page for you at its hourly rate. Open a case.

Applies to

Simple Signature 5.8.x, paid version. These steps come from the tested Simple Signature implementation guide, where they sit with the steps before and after them.

Was this helpful?

Related

Support

Still stuck?

Open a case and paste the exact error text. A person reads every case.