I would build a custom solution, creating your new leads/contacts in SFDC. This way, you avoid having having duplicates, if your sales creates same person in SFDC, while your form only creates same one in SFMC.
You would create a Cloud Page with a form, where all the needed fields are present. This form should then post to itself, where AmpScript is taking care of the communication with SFDC. Once the form is being submitted, you should do following:
- Decide on deduplication rules, in order to check if existing lead/contact exists for the same person. A good way of doing it is by RetrieveSalesforceObjects using email address as query parameter.
- If your RetrieveSalesforceObjects call returns 0 rows, proceed to creating the record in SFDC, using CreateSalesforceObject.
- If your RetrieveSalesforceObjects returns a record, you can use UpdateSingleSalesforceObject to append/update it's data.
You will then have created your new subscriber in SFDC, and this person will soon get synchronised to SFMC Synchronised Data Extensions. If you want to send an email immediately upon the creation, you can use the Triggered Send configuration in SFDC as described here. This will trigger the email to this record, even before it is synchronised to SFMC. You can also use Salesforce Data Entry Event to inject this person int your Journey Builder.