At signup, auto assign organization:contact relationship based on email domain being the same
Thanks everyone!  I solved it totally with CiviRules extension.  I just used a combination of the built-in API explorer &amp; the extension's documentation to figure out how to create my own Condition &amp; Action.

The condition checks if that domain exists for an Organization.  I set it to work ONLY if it finds 1 (just to make it work simply for now) and the contact is an Individual (no Org to Org relationships).  If true, the Action then creates the relationship.

To make this work, when we set up an Org..  we make a dummy email their primary/main email and put it on hold so no communications go out to it.. like this: dummy@domain.com

I'll share the big stuff.  I'm not a coder, so if someone finds a better way to do this.. let me know.    

https://docs.civicrm.org/civirules/en/latest/

    Condition:

  public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData) {
    /** $this-&gt;logCondition('my con log message', $triggerData, \PSR\Log\LogLevel::INFO); */
    $contactId = $triggerData-&gt;getContactId();
    $contactTypeParams = array('return' =&gt; "contact_type",'id' =&gt; $contactId);
    $contactType = civicrm_api3('Contact', 'Getvalue', $contactTypeParams);
    $contactEmailParams = array('return' =&gt; "email",'id' =&gt; $contactId);
    $contactEmail = civicrm_api3('Contact', 'getvalue', $contactEmailParams);
    $contactEmailDomain = substr(strrchr($contactEmail, "@"), 1);
    $orgEmailDomainCountParams = array('email' =&gt; ['LIKE' =&gt; "%" . $contactEmailDomain],'contact_type' =&gt; "Organization");
    $orgEmailDomainCount = civicrm_api3('Contact', 'getcount', $orgEmailDomainCountParams);
    if ($orgEmailDomainCount = 1 &amp;&amp; $contactType = "Individual"){
        return TRUE;
    } else {
    return FALSE;
    }

    Action:

  public function processAction(CRM_Civirules_TriggerData_TriggerData $triggerData) {
     /** $this-&gt;logAction('my act log message', $triggerData, \PSR\Log\LogLevel::INFO);  */
    $contactId = $triggerData-&gt;getContactId();
    $contactEmailParams = array('return' =&gt; "email",'id' =&gt; $contactId);
    $contactEmail = civicrm_api3('Contact', 'getvalue', $contactEmailParams);
    $contactEmailDomain = explode('@', $contactEmail)[1];
    $orgContactIdParams = array('return' =&gt; "id",'email' =&gt; ['LIKE' =&gt; "%" . $contactEmailDomain],'contact_type' =&gt; "Organization");
    $orgContactId = civicrm_api3('Contact', 'getvalue', $orgContactIdParams);
    civicrm_api3('Relationship', 'create', ['contact_id_a' =&gt; $contactId,'contact_id_b' =&gt; $orgContactId,'relationship_type_id' =&gt; 5,'is_active' =&gt; 1,'is_permission_a_b' =&gt; 2,]);
    civicrm_api3('Contact', 'create', ['id' =&gt; $contactId,'employer_id' =&gt; $orgContactId,]);
  }