Linkhttps://appexchange.salesforce.com/listingDetail?listingId=a0N300000016ac6EAA
Pricing$59/month. Discounted for NFP's (more for Prefill ability)
5 Users / YearUS$3540
DescriptionExcellent forms tool for creating and updating any records in Salesforce.

Details

http://www.formassembly.com/

If you are doing more than one simple Web To Lead form then I would strongly recommend this. 

Here is a good article on using Form Assembly rather than Web To Lead.

Documentation

http://www3.formassembly.com/blog/doc/connectors/salesforce/configuration/

Notes

To Prefill data securely, you need the Form Assembly Premier edition at $130/month and then you need to set up the security in custom code in Salesforce. 

http://www3.formassembly.com/blog/doc/connectors/salesforce/prefill/

Depending on your data requirements and security requirements, you can email out the form pre-filled, with the regular edition of FA by just passing the data through the URL - but be very careful with this

Issues

Authentication

Uses Token Authentication (on Professional and Premier Editions of FA). Oh cool they now use oAuth. I would still strongly suggest using a separate Integration login though. 

Using

It is a bit of a dog to use - you have to go into a completely different section to edit the form, edit the themes and set up the connector. 

Dealing with sections is really finicky. You never know where they are and how nested they are. It is so hard to move questions between sections. Use the Move this Question Up and Down links and the Parent Section link to try to control it. And look in the connector to tell you how many sections you have.

I add some CSS to the form builder to clearly see the sections, then comment it out when the form is to go live. (But also use the hierarchy view to see the different sections)

 /*Editing*/
  .section .group {
    border-width: thick;
    border-color: blue;
    border-style: solid;
  } 

NPSP

The trick to working with the Nonprofit Success Pack - NPSP is: 

In my form, I need to create a Contact (which will then create the Account) and an Opportunity. To create an Opportunity, I need to get the AccountID that was created automatically. Luckily the Account that is created automatically has a lookup to the contact. Query the account based on the Contact ID that was created first, then pass that through to the Opportunity.

Things I want Form Assembly to Fix

Nice to have:

Cool things

I do forms with multi branding. 

I pass in the brand as a parameter (preferably by a secure Salesforce parameter). 

I hide the form title with CSS

  /* Hide Title of Form */
  .wFormContainer .wFormTitle {
    display: none;
  }

 

I add a section with a drop down field to accept the brand parameter, then I hide that whole section with CSS. 

  /* Hide custom fields */
  #tfa_87, #tfa_43-D, #tfa_68-D {
    display:none; 
  } 

I add a section containing a new text for form Title and the brand logo, then conditionally display that section based on the parameter. 

And I increase the font size of the new form Title text. 

   /* Enlarge major Headings */
  #tfa_89-HTML {
    font-size:18px;
    font-style:bold;
    padding-top: 40px;
    padding-bottom: 10px;
  }

 

So then you only have one form to maintain, but it can work for multiple brands.